亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何根據條件復制多維子數組值?

如何根據條件復制多維子數組值?

PHP
拉丁的傳說 2023-06-24 18:45:29
我有一個array這樣的:Array([05049207256] => Array    (        [0] => Array            (                [ID_NUMBER] => 05049207256                [CID] => 29113082                [GROUP_ID] =>                 [B_CODE] => 10152/6277            )        [1] => Array            (                [ID_NUMBER] => 05049207256                [CID] => 29093574                [GROUP_ID] =>                 [B_CODE] => 10241/6244            )    )[16992375298] => Array    (        [0] => Array            (                [ID_NUMBER] => 16992375298                [CID] => 29112537                [GROUP_ID] => 398242                [B_CODE] => 10152/6277            )        [1] => Array            (                [ID_NUMBER] => 16992375298                [CID] => 29112169                [GROUP_ID] => 398223                [B_CODE] => 10152/6276            )    )[21871540019] => Array    (        [0] => Array            (                [ID_NUMBER] => 21871540019                [CID] => 29112605                [GROUP_ID] => 398048                [B_CODE] => 10152/6277            )        [1] => Array            (                [ID_NUMBER] => 21871540019                [CID] => 29113036                [GROUP_ID] => 398040                [B_CODE] => 10152/6277            )        [2] => Array            (                [ID_NUMBER] => 21871540019                [CID] => 29112733                [GROUP_ID] => 398039                [B_CODE] => 10152/6277            )        [3] => Array            (                [ID_NUMBER] => 21871540019                [CID] => 29110803                [GROUP_ID] => 398039                [B_CODE] => 10152/6275            )    )
查看完整描述

3 回答

?
滄海一幻覺

TA貢獻1824條經驗 獲得超5個贊

我的方法是這樣的:


$result = […]; // your input data


foreach( $result as $key => $item ) {

? // get group IDs for current item

? $group_ids = array_column( $item, 'GROUP_ID' );

? // if count is 1, remove item

? if( count( $group_ids ) == 1 ) {

? ? ? unset( $result[$key] );

? }

? else {

? ? // get only unique group IDs

? ? $group_ids_unique = array_unique( $group_ids );


? ? // is there is only one unique group ID, and it is empty?

? ? if( count( $group_ids_unique ) == 1 && !$group_ids_unique[0] ) {

? ? ? // do nothing

? ? }

? ? else {

? ? ? ? // get one “random” group id - either the 1st, or if that is empty, the 2nd one

? ? ? ? $group_id_set = $group_ids_unique[0] ? $group_ids_unique[0] : $group_ids_unique[1];

? ? ? ? // set that group ID for all entries in current item

? ? ? ? foreach( $item as $sub_key => $sub_value ) {

? ? ? ? ? ? $result[$key][$sub_key]['GROUP_ID'] = $group_id_set;

? ? ? ? }

? ? }

? }

}

為了清楚起見,我把 the// do nothing if留在那里——當然,也可以重寫它,否定整個條件,并使當前的 else 分支編碼為 if 分支。


查看完整回答
反對 回復 2023-06-24
?
墨色風雨

TA貢獻1853條經驗 獲得超6個贊

這是一個簡單的解決方案,僅使用array_column


foreach($result as $key => $array){

    if(count($array) >= 2){

        $group_ids = array_column($array,'GROUP_ID');//get all group_ids

        foreach($group_ids as $k => $v){

            if(!empty($v)){//if there is non-empty one change the values and break the loop

                foreach($array as $key2 => $array2){

                    $result[$key][$key2]['GROUP_ID'] = $v;

                }

                break;

            }

        }

    }else{

        unset($result[$key]);

    }

}


查看完整回答
反對 回復 2023-06-24
?
大話西游666

TA貢獻1817條經驗 獲得超14個贊

foreach ($result as $key => $val) {

        if (count(array_keys($val)) == 1) {                 

            unset ($result[$key]);

        } else if (count(array_keys($val)) >= 2/* && empty($result[$key][$key1]['GROUP_ID'])*/) {

            /*$assign_value = $val[0]['GROUP_ID'];                    

            $result[$key][$key1]['GROUP_ID'] = $assign_value;*/

            $GROUP_ID = null;

            for ($index = 0; ($GROUP_ID) && ($index < count($val)); $index++) {

                if ((isset($val["GROUP_ID"])) && (!!$val["GROUP_ID"])) {

                    $GROUP_ID = $avl["GROUP_ID"];

                }

            }

            if (!!$GROUP_ID) {

                for ($index = 0; $index < count($val); $index++) {

                    $val["GROUP_ID"] = $GROUP_ID;

                }

            }

        }

}

刪除了 if 周圍的內部 for 循環

if 不需要在它周圍使用循環,我們可以確定數組內的項目數而無需循環它們。

第二個if修改為else-if

雖然在這種情況下,如果第一個if為真,,那么第二個將是false,這在形式上是正確的,但最好使其正式化以獲得更好的可讀性。

我不檢查 else 中 GROUP_ID 是否為空

無論子數組的第一個元素是否具有空 GROUP_ID,第二個元素都可能非空。因此,您不需要檢查子數組中的第一個項目是否具有非空 GROUP_ID,而是需要檢查子數組中的任何項目是否為非空,因為這是真實條件

檢查是否有非空GROUP_ID需要循環

初始化后,$GROUP_ID我們不知道子數組中是否至少有一個非空的 GROUP_ID。因此,我們循環遍歷子數組,如果找到非空 GROUP_ID,則記錄下來并停止循環。

確定是否需要覆蓋 GROUP_ID

如果$GROUP_ID為 truey,則意味著我們已經覆蓋了它的初始值,即null,或者換句話說,這意味著我們找到了一個非空的 GROUP_ID。

覆蓋元素

在最后一個內部,如果我們將子數組中的所有 GROUP_ID 值覆蓋為我們找到的值。


查看完整回答
反對 回復 2023-06-24
  • 3 回答
  • 0 關注
  • 196 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號