【问题标题】:Finding multi dimensional array value that doesnt match查找不匹配的多维数组值
【发布时间】:2018-12-07 14:08:51
【问题描述】:

我有两个多维数组。两个数组几乎相同,只是其中一个数组的值在另一个数组中不存在。我正在使用的数组是:

数组1

Array
(
    [0] => Array
        (
            [dexcode] => BeS712210
        )

    [1] => Array
        (
            [dexcode] => De 48245
        )

    [2] => Array
        (
            [dexcode] => All50481
        )

    [3] => Array
        (
            [dexcode] => Bis1016338
        )

    [4] => Array
        (
            [dexcode] => S-T41471
        )

    [5] => Array
        (
            [dexcode] => Ron35844
        )

    [6] => Array
        (
            [dexcode] => Lin10961
        )

    [7] => Array
        (
            [dexcode] => Tip295926
        )

    [9] => Array
        (
            [dexcode] => SLN893827
        )

    [10] => Array
        (
            [dexcode] => Fen1016241
        )

    [11] => Array
        (
            [dexcode] => Aut331661
        )

    [12] => Array
        (
            [dexcode] => Pro39613
        )

    [13] => Array
        (
            [dexcode] => Com920158
        )

    [14] => Array
        (
            [dexcode] => Sma21322
        )

    [15] => Array
        (
            [dexcode] => Bev121157
        )

    [16] => Array
        (
            [dexcode] => Cit3043324
        )

    [17] => Array
        (
            [dexcode] => Que2182100
        )

)

数组2:

Array
(
    [0] => Array
        (
            [dexcode] => BeS712210
        )

    [1] => Array
        (
            [dexcode] => De 48245
        )

    [2] => Array
        (
            [dexcode] => All50481
        )

    [3] => Array
        (
            [dexcode] => Bis1016338
        )

    [4] => Array
        (
            [dexcode] => S-T41471
        )

    [5] => Array
        (
            [dexcode] => Ron35844
        )

    [6] => Array
        (
            [dexcode] => Lin10961
        )

    [7] => Array
        (
            [dexcode] => Tip295926
        )

    [9] => Array
        (
            [dexcode] => SLN893827
        )

    [10] => Array
        (
            [dexcode] => Fen1016241
        )

    [11] => Array
        (
            [dexcode] => Aut331661
        )

    [12] => Array
        (
            [dexcode] => Pro39613
        )

    [13] => Array
        (
            [dexcode] => Com920158
        )

    [14] => Array
        (
            [dexcode] => Sma21322
        )

    [15] => Array
        (
            [dexcode] => Bev121157
        )

    [16] => Array
        (
            [dexcode] => Que2182100
        )

)

不匹配的值:

[16] => Array
    (
        [dexcode] => Cit3043324
    )

使用 PHP,我尝试获取不匹配的值,如下所示:

$a1 =array_unique($all_codes,SORT_REGULAR);

$a2 =array_unique($matches,SORT_REGULAR);

$results = check_diff_multi($a1, $a2);

function check_diff_multi($array1, $array2){
    $results = array();
    foreach($array1 as $key => $val) {
         if(isset($array2[$key])){
           if(is_array($val) && $array2[$key]){
               $result[$key] = check_diff_multi($val, $array2[$key]);
           }
       } else {
           $results[$key] = $val;
       }
    }

    return array_unique($results,SORT_REGULAR);
}

$a1 是我在上面发布的第一个包含不同值的数组。 $a2 是第二个。

应该将不同的值添加到 $results 变量中。

当我像这样检查 $results 中的内容时:

print '<pre>';
print_r($results);
print '</pre>'; 

我得到这个结果:

Array
(
    [17] => Array
        (
            [dexcode] => Que2182100
        )

)

似乎只选择最后一个值。有谁知道为什么会这样?

【问题讨论】:

  • 你的if(is_array($val) &amp;&amp; $array2[$key]){ 条件对我来说很奇怪:不应该是if(is_array($val) &amp;&amp; is_array($array2[$key])){吗?

标签: php arrays multidimensional-array


【解决方案1】:

使用array_column 和array_diff 函数

$arr1 = array_column($arr1, 'dexcode');
$arr2 = array_column($arr2, 'dexcode');
print_r(array_diff($arr1, $arr2));

demo

【讨论】:

  • 非常感谢,这要短得多。
猜你喜欢
  • 2012-09-06
  • 1970-01-01
  • 2017-10-11
  • 1970-01-01
  • 1970-01-01
  • 2014-09-23
  • 2019-08-17
  • 2018-04-24
  • 2015-08-02
相关资源
最近更新 更多