与自定义样式的数组组合

时间:2014-01-12 06:58:16

标签: php arrays

我有这种阵列。

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
        )

)

2 个答案:

答案 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

如果是这样,我们只需将parkTypeIDcost之间的新关联附加到现有值。

如果没有,我们会将supplierID添加到$r并为其指定一个只包含parkTypeIDcost对的数组。


以上代码的简化版本依赖于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());