将具有相同值的Array放入另一个数组中?

时间:2017-04-30 12:24:20

标签: php arrays

我有一个大数组,它有一个类似值的加载但我想把所有具有相同值的数组放到另一个数组中。例如,我有这个数组。

    array(4) {
      [0]=>
      array(8) {
       ["symbol"]=>
        string(3) "aaaa"
        ["name"]=>
        string(7) "aaaa"
        ["buy_price"]=>
        string(14) "100.0000000000"
        ["current_worth"]=>
        string(14) "100.2500000000"
      }
      [3]=>
      array(8) {
       ["symbol"]=>
        string(3) "aaa"
        ["name"]=>
        string(7) "aaaaa"
        ["buy_price"]=>
        string(14) "100.0000000000"
        ["current_worth"]=>
        string(14) "100.2500000000"
      }
      [2]=>
      array(8) {
       ["symbol"]=>
        string(3) "xxx"
        ["name"]=>
        string(7) "xxxxx"
        ["buy_price"]=>
        string(14) "100.0000000000"
        ["current_worth"]=>
        string(14) "100.2500000000"
      }
   }

我希望能够通过foreach循环运行此数组,然后将所有具有相同名称的数组结果输出。也喜欢

  • 命名aaa - 姓名aaa [0] - 姓名aaa [1]

  • 姓名xxx - 姓名xxx [0]

我正在努力学习逻辑。

1 个答案:

答案 0 :(得分:2)

如果我理解正确,你需要减少一些。假设$origin_array包含您需要转换的内容:

$result = array_reduce($origin_array, function ($carry, $item) {
    $name = $item['name'];
    $carry[$name][] = $item;
    return $carry;
}, []);

此代码将生成二维数组,其中元素按name原点数组分组。

说明

最好的解释是编写类比foreach循环:

$my_reduce = function ($carry, $item) { // callback, 2-nd param
    $name = $item['name'];
    $carry[$name][] = $item;
    return $carry;
};

$result = []; // initial value, 3 param

foreach($origin_array as $item) {
    $result = $my_reduce($result, $item);
}

这粗略地说明了array_reduce功能引发的事情。