【问题标题】:PHP Combine multiple array into one multidimensional associative arrayPHP 将多个数组合并为一个多维关联数组
【发布时间】:2020-06-24 15:21:30
【问题描述】:

我有三个要与多维关联数组组合的数组。

原始数组

$statiosnIds = [12, 17, 20, 32];
$distances   = [0, 2.5, 3.0, 6.2];
$orders      = [0, 1, 2, 3];

结果查看

$data = [
    [
        'station_id' => 12,
        'distance'   => 0,
        'order'      => 0,
    ],
    [
        'station_id' => 17,
        'distance'   => 2.5,
        'order'      => 1,
    ],
    [
        'station_id' => 20,
        'distance'   => 3.0,
        'order'      => 2,
    ],
    [
        'station_id' => 32,
        'distance'   => 6.2,
        'order'      => 3,
    ]
];

我可以为每个循环使用三个,但我想知道是否有更好、更优化的方法来实现它。

【问题讨论】:

  • 也许您只需要一个 foreach 循环并通过键从其他数组中选择值。
  • @SergiyT。谢谢,我想我明白你说的了。但是,skapicic 有一个替代解决方案。谢谢,不胜感激。

标签: php arrays


【解决方案1】:

你可以使用array_map

代码看起来像

$data = array_map(function($a, $b, $c) {
   return ['station_id' => $a, 'distance' => $b, 'order' => $c]; 
}, $statiosnIds, $distances, $orders);

【讨论】:

  • 天啊,你把事情搞定了。不能比这更简单了。如果您能解释一下,我将不胜感激。非常感谢。
  • 好的,所以 array_map 是一个对多个数组执行操作的函数(我们可以称该数字为n)并返回一个新数组。数组n 的数量必须与传递给回调函数的参数数量相匹配,在我们的例子中是$a, $b, $c。因此,当回调函数遍历我们传递的所有数组时,它会从头到尾进行迭代,并且一旦完全遍历任何数组,就不再调用该函数。所以在我们的第一次迭代中$a = reset($statiosnIds), $b = reset($distances), $c = reset($orders).
  • 当我们从回调函数返回 ['station_id' => $a, 'distance' => $b, 'order' => $c] 时,该值将返回到 array_map 函数必须返回的新数组(在我们的例子中为 $data)。因此,对于我们所有数组的每个成员,它将进入下一个成员(如果它们存在于所有 3 个数组中),否则它将退出并结束 array_map 回调。
  • 太好了,非常感谢您的解释。这很清楚,很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-08
  • 1970-01-01
  • 1970-01-01
  • 2011-11-26
  • 2020-04-20
  • 2016-10-19
  • 2016-09-28
相关资源
最近更新 更多