【问题标题】:Putting Array with same values into another array?将具有相同值的数组放入另一个数组?
【发布时间】:2017-04-30 12:24:19
【问题描述】:

我有一个大数组,其中包含类似值的负载,但我想将所有具有相同值的数组放入另一个数组中。比如我有这个数组。

    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]

我正在努力如何做逻辑。

【问题讨论】:

标签: php arrays


【解决方案1】:

如果我理解正确,你需要一些减少。假设 $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 函数的底层发生的事情。

【讨论】:

  • 这正是我所需要的!你能简单描述一下代码中发生的事情,这样我就可以更好地理解它是如何工作的:)
  • 我试过了 =) 毕竟使用函数的所有文档应该是最好的解释
猜你喜欢
  • 2022-01-25
  • 1970-01-01
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多