PHP按值合并数组

时间:2011-11-01 22:53:12

标签: 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值(或其他)合并,而无需进入无限的foreach s?

5 个答案:

答案 0 :(得分:14)

使用array_merge_recursive()

$array = array_merge_recursive($array1, $array2);

或制作自己的功能(可能更快)

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);

答案 1 :(得分:2)

Ray在评论中注意到,接受的答案实际上并没有回答这个问题。我无法找到答案,因此我创建了以下小实用程序函数:

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;
}

按如下方式使用:

array_merge_callback($array1, $array2, function ($item1, $item2) {
    return $item1['id'] == $item2['id'];
});

答案 2 :(得分:2)

有一个很好的合并数组像其他语言。 这是因为php有自动编号数组元素,并且合并将通过键来标记或替换不同的元素。

现在,它已经改变了。

// array_fork
  public static function array_fork() {
    $args = func_get_args();
    $result = array();
    foreach ($args as $arr) {
      is_array($arr) || exit('[' . __METHOD__ . '] Each item must be an array.');
      foreach ($arr as $key => $val) {
        if (is_array($val)) {
          // recursion
          !isset($result[$key]) && $result[$key] = array();
          $result[$key] = self::array_fork($result[$key], $arr[$key]);
          continue;
        }
        if (is_numeric($key)) {
          if (!in_array($arr[$key], $result))
            $result[] = $arr[$key];
        } else
          $result[$key] = $arr[$key];
      }
    }
    return $result;
  }

答案 3 :(得分:1)

function custom_array_merge(&$array1, &$array2) {
    $result = Array();
    foreach ($array1 as $key_1 => &$value_1) {
        // if($value['name'])
        foreach ($array2 as $key_1 => $value_2) {
            if($value_1['name'] ==  $value_2['name']) {
                $result[] = array_merge($value_1,$value_2);
            }
        }

    }
    return $result;
}

//传递$ array1,& $ array2并根据您要合并的内容更改$ value_2 [' name'] //名称。

答案 4 :(得分:0)

好吧,让我们假设您的数组名为$ arr1和$ arr2,您可以这样做:

<?php
$newarray = Array();
foreach ($arr1 as $element=>$value){
    $newarray = array_merge($arr1[$element],$arr2[$element])
}
?>