【问题标题】:Compare 2 multidimensionals arrays and get common values PHP比较 2 个多维数组并获取共同值 PHP
【发布时间】:2017-10-26 14:53:22
【问题描述】:

我需要一个解决方案来在两个索引未知的数组之间获得相同的值。

例如这里的第一个数组$a

Array(
[0] => Array
    (
        [field_name] => Aerospace
        [zonegeo] => Angola
    )

[1] => Array
    (
        [field_name] => Aerospace
        [zonegeo] => Cameroon
    )

[2] => Array
    (
        [field_name] => Aerospace
        [zonegeo] => Congo
    )

[3] => Array
    (
        [field_name] => Beauty - Care
        [zonegeo] => Angola
    )

[4] => Array
    (
        [field_name] => Beauty - Care
        [zonegeo] => Cameroon
    )

[5] => Array
    (
        [field_name] => Beauty - Care
        [zonegeo] => Swaziland
    )
)

第二个数组$b:

Array(
[0] => Array
    (
        [field_name] => Beauty - Care
        [zonegeo] => Angola
    )

[1] => Array
    (
        [field_name] => Beauty - Care
        [zonegeo] => Swaziland
    )
)

我想获得第三个数组,其中包含第一个和第二个数组的公共值。

相同的值是

     1.[field_name] => Beauty - Care [zonegeo] => Angola 
     2.[field_name] => Beauty - Care [zonegeo] => Swaziland

我尝试了array_intersect($a, $b),但它不起作用。

【问题讨论】:

标签: php arrays multidimensional-array compare


【解决方案1】:

问题是array_intersect使用字符串比较,当数组转换为字符串时,它们都是相等的,所以它们都在交集处结束。 (而且您会收到一堆数组到字符串的转换通知,这也不是很好。)要将内部数组作为数组进行比较,您可以使用array_uintersect,并带有一个比较数组的回调。

$x = array_uintersect($a, $b, function($a, $b) {
    return $a <=> $b;
});

如果您没有 PHP 7,则不能使用 &lt;=&gt; 运算符,因此您需要多几行来复制其功能。

$x = array_uintersect($a, $b, function($a, $b) {
    if ($a < $b) return -1;
    if ($a > $b) return 1;
    return 0;
});

【讨论】:

  • 我试过你的方法,但它返回第一个数组的所有值。
  • @yuhell 我不确定为什么我在测试时认为它有效。你是对的,它没有工作。我更新了答案。
【解决方案2】:

检查此解决方案。考虑到两个数组的键相同/匹配。

//Computes the intersection of arrays, compares data by a callback function
$intersect_array = array_uintersect($a, $b, 'compareArray');
print_r($intersect_array );

// call back function code
function compareArray($val1, $val2){
  // convert the array to string by serialize and compare the strings
  return strcmp(serialize($val1), serialize($val2));
}

输出:

Array
(
    [3] => Array
        (
            [field_name] => Beauty - Care
            [zonegeo] => Angola
        )

    [5] => Array
        (
            [field_name] => Beauty - Care
            [zonegeo] => Swaziland
        )

)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多