比较2个多维数组并获得PHP的常用值

时间:2017-10-26 14:53:23

标签: php arrays multidimensional-array compare

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

例如,这里是第一个数组$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和第2个数组的常用值。

相同的值是

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

我试过了array_intersect($a, $b),但它没有用。

2 个答案:

答案 0 :(得分:0)

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

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

如果您没有PHP 7,则无法使用<=>运算符,因此您需要更多行来复制其功能。

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

答案 1 :(得分:0)

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

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

Out put:

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

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

)