PHP按值合并数组

Osv*_*ado 8 php arrays merge

我知道用一个foreach,然后一个while- >列表等程序很容易实现,(我已经完成了它),但我觉得我的代码有点脏,看起来不是最好的解决方案......我想使用本机PHP数组函数来执行以下操作:

我有两个看起来像这样的数组:

[0] (Array)#2
  [rank] "579"
  [id] "1"
[1] (Array)#4
  [rank] "251"
  [id] "2"

[0] (Array)#2
  [size] "S"
  [status] "A"
  [id] "1"
[1] (Array)#15
  [size] "L"
  [status] "A"
  [id] "2"

我需要的结果如下:

[0] (Array)#2
  [size] "S"
  [status] "A"
  [id] "1"
  [rank] "579"

[1] (Array)#2
  [size] "L"
  [status] "A"
  [id] "2"
  [rank] "251"

有没有办法能够合并两个数组与id值(或其他),而无需进入无限的foreachs?

Pet*_*ter 14

使用array_merge_recursive()

$array = array_merge_recursive($array1, $array2);
Run Code Online (Sandbox Code Playgroud)

或者自己动手(可能会更快)

function my_array_merge(&$array1, &$array2) {
    $result = Array();
    foreach($array1 as $key => &$value) {
        $result[$key] = array_merge($value, $array2[$key]);
    }
    return $result;
}
$array = my_array_merge($array1, array2);
print_r($array);
Run Code Online (Sandbox Code Playgroud)

  • 这在技术上不能回答这个问题.@OsvaldoM.想要基于id的值而不是键来加入. (9认同)

Mar*_*ijn 6

正如雷在评论中注意到的那样,接受的答案实际上并没有回答问题。我无法找到答案,所以我创建了以下小实用函数:

function array_merge_callback($array1, $array2, $predicate) {
    $result = array();

    foreach ($array1 as $item1) {
        foreach ($array2 as $item2) {
            if ($predicate($item1, $item2)) {
                $result[] = array_merge($item1, $item2);
            }
        }
    }

    return $result;
}
Run Code Online (Sandbox Code Playgroud)

使用方法如下:

array_merge_callback($array1, $array2, function ($item1, $item2) {
    return $item1['id'] == $item2['id'];
});
Run Code Online (Sandbox Code Playgroud)