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 分支。

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]);
}
}

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 值覆蓋為我們找到的值。
- 3 回答
- 0 關注
- 196 瀏覽
添加回答
舉報