我有这种阵列。
Array
(
[0] => Array
(
[supplierID] => 1
[parkTypeID] => 1
[cost] => 17
)
[1] => Array
(
[supplierID] => 2
[parkTypeID] => 1
[cost] => 65
)
[2] => Array
(
[supplierID] => 2
[parkTypeID] => 2
[cost] => 30
)
)
我想要像这样组合对于supplierID具有相同值的元素。每个键名的值都设置在新数组的键中。
Array
(
[1] => Array
(
[1] => 17
)
[2] => Array
(
[1] => 65
[2] => 30
)
)
答案 0 :(得分:1)
尝试
$r = array();
foreach ($array1 as $x) {
if (array_key_exists($x['supplierID'], $r)
$r[$x['supplierID']][$x['parkTypeID']] = $x['cost'];
else
$r[$x['supplierID']] = array($x['parkTypeID'] => $x['cost']);
}
这将迭代初始数组$array1
并创建一个包含所需信息的新数组$r
。
对于原始数组中的每个元素,我们会检查supplierID
中是否存在$r
。
如果是这样,我们只需将parkTypeID
和cost
之间的新关联附加到现有值。
如果没有,我们会将supplierID
添加到$r
并为其指定一个只包含parkTypeID
和cost
对的数组。
以上代码的简化版本依赖于php在必要时将未设置的数组索引初始化为空数组
$r = array();
foreach ($array1 as $x)
$r[$x['supplierID']][$x['parkTypeID']] = $x['cost'];
答案 1 :(得分:0)
$arr_res = array_reduce($arr, function($t, $v) {
if (!isset($t[$v['supplierID']]))
$t[$v['supplierID']] = array();
$t[$v['supplierID']][] = $v['cost'];
return $t;
} , array());