【问题标题】:PHP Array Merge two Arrays with the same valuePHP Array 合并两个具有相同值的数组
【发布时间】:2014-03-04 07:25:37
【问题描述】:

我是 PHP 新手,我正在尝试将以下两个数组合并为一个数组,匹配相同的 CODE 值:

Array(1)
(
    [0] => Array
        (
            [0] => CODE11
            [1] => NAME
            [2] => ADDRESS
        )
    [1] => Array
        (
            [0] => CODE23
            [1] => NAME
            [2] => ADDRESS
        )
    [2] => Array
        (
            [0] => CODE25
            [1] => NAME
            [2] => ADDRESS
        )
)

和

Array(2)
(
    [0] => Array
        (
            [0] => CODE43
            [1] => CITY
            [2] => COUNTRY
        )
    [1] => Array
        (
            [0] => CODE25
            [1] => CITY
            [2] => COUNTRY
        )
    [2] => Array
        (
            [0] => CODE89
            [1] => CITY
            [2] => COUNTRY
        )
)

进入这个新数组:

Result
(
    [0] => Array
        (
            [0] => CODE25
            [1] => NAME
            [2] => ADDRESS
            [3] => CITY
            [4] => COUNTRY
        )
)

如您所见,两个数组上只有 CODE25 匹配。我该如何解决?

【问题讨论】:

标签: php arrays


【解决方案1】:
$hash = array();
// First create an associative array from $array1 using the CODE as the key
foreach ($array1 as $el) {
    $hash[$el[0]] = $el;
}
// Then append the data from $array2 to matching elements
foreach ($array2 as $el) {
    if (isset($hash[$el[0]])) {
        $hash[$el[0]] = array_merge($hash[$el[0]], array_slice($el, 1));
    }
}
// Now find the elements that were matched and return them as an ordinary array
$new_array = array_values(array_filter($hash, function($x) { return count($x) > 3; }));

【讨论】:

  • +1 算法简单好用,比我的更快 :)
  • 感谢您的帮助!但我无法让它工作!实际上,我的 2 个数组中的每一个都有 15.000 个子数组,算法只返回 1 个结果 =(
  • 您可以用var_export() 发布一些示例数据,以便我可以尝试使用它运行我的脚本吗?
【解决方案2】:

我们可以通过使用原生 PHP 函数用更少的代码来做到这一点,但不是那样做,因为你正在学习,让我们尝试一个非常基本的方法:

foreach ($array1 as $key1 => $value1)
{
    foreach ($array2 as $key2 => $value2)
    {
        if ($value1[0] == $value2[0])
            $result[] = array(
                $value1[0],
                $value1[1],
                $value1[2],
                $value2[1],
                $value2[2]
            );
    }
}

免责声明:这不是一个非常有效的算法。但是对于少量数据($array1 和 $array2 每个 Big O notation。

【讨论】:

  • 您将代码复制到结果中两次。
  • 试过你的代码..没有运气。实际上我正在使用 15.000 个数组,我使用的代码与此类似:foreach($array1 as $value) { foreach($array2 as $value1) { if($value['0'] == $value1[0]) { do something....; } } } 但我的 pc i7 似乎无法处理它 =(
  • 太棒了!所以你有一个很好的例子说明找到一个好的算法有多重要
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
  • 1970-01-01
  • 1970-01-01
  • 2013-01-28
  • 2018-10-30
  • 1970-01-01
相关资源
最近更新 更多