在PHP中使用单个数组时,我希望合并为with,并且能够这样做,但是只有1次返回,其中应该有2。
下面是原始数组和新数组。
id LIKE 'fghij' OR id LIKE 'abcde'
$orig = Array
(
[0] => Array
(
[id] => abcde
[field2] => height
[value2] => 40 ft.
)
[1] => Array
(
[id] => abcde
[field3] => width
[value3] => 10-15 ft.
)
[2] => Array
(
[id] => abcde
[field4] => light
[value4] => Full - Partial
)
[3] => Array
(
[id] => abcde
[field6] => space
[value6] => 5-6 ft.
)
[4] => Array
(
[id] => fghij
[field2] => height
[value2] => 4-8 ft.
)
[5] => Array
(
[id] => fghij
[field3] => width
[value3] => 3-4 ft.
)
[6] => Array
(
[id] => fghij
[field4] => light
[value4] => Full - Partial
)
[7] => Array
(
[id] => fghij
[field5] => season
[value5] => Spring
)
[8] => Array
(
[id] => fghij
[field6] => space
[value6] => 4 ft.
)
[9] => Array
(
[id] => fghij
[field19] => restricted
[value19] => CA, TX, LA, FL, AZ
)
[10] => Array
(
[id] => abcde
[field19] => restricted
[value19] => AZ
)
)
$new = Array
(
[id] => abcde
[field2] => height
[value2] => 4-8 ft.
[field3] => width
[value3] => 3-4 ft.
[field4] => light
[value4] => Full - Partial
[field6] => space
[value6] => 4 ft.
[field5] => season
[value5] => Spring
[field19] => restricted
[value19] => AZ
)
$new
几乎是正确的,但它忽略了与fghij
相关的所有内容,返回了一个扁平数组。我希望它用合并的值返回两个id。
这就是我的代码智慧的地方:
$new_new = [];
foreach($orig as $key => $value){
if(is_array($value)){
$new_new = array_merge($new_new, $value);
}
}
发布于 2018-05-23 16:26:13
您需要为每个唯一的id积累条目。
function mergeByKey($array,$key){
$result = [];
foreach($array as $entry){
$is_new = true;
foreach($result as &$result_entry){
if($result_entry[$key]==$entry[$key]){
$is_new = false;
$result_entry = array_merge($result_entry,$entry);
break;
}
}
if($is_new)
$result[] = $entry;
}
return $result;
}
$new_new = mergeByKey($orig,'id');
发布于 2018-05-23 16:10:24
可能像这样对你有用吗?您可以为$value‘’id‘添加其他检查。
$new = [];
foreach($arr as $key => $value){
if(is_array($value)){
if( !array_key_exists($value['id'],$new) ){
$new[$value['id']] = [];
}
$new[$value['id']] = array_merge($new[$value['id']], $value );
}
}
我改变了我的算法,现在正如我所期望的那样。
https://stackoverflow.com/questions/50492498
复制相似问题