检查数组是否包含其他数组(用于多维数组)php

时间:2018-12-16 07:20:48

标签: php arrays

我期待在PHP中比较两个数组。

例如,我有数组A:

Array
(
    [0] => Array
        (
            [option_id] => 19
            [sub_option_id] => 57
        )

    [1] => Array
        (
            [option_id] => 1093
            [sub_option_id] => 3582
        )

    [2] => Array
        (
            [option_id] => 1093
            [sub_option_id] => 57
        )

)

还有数组B:

Array
(
    [0] => Array
        (
            [order_option_detail] => Array
                (
                    [0] => Array
                        (
                            [option_id] => 19
                            [sub_option_id] => 57
                        )

                    [1] => Array
                        (
                            [option_id] => 1093
                            [sub_option_id] => 57
                        )

                    [2] => Array
                        (
                            [option_id] => 1093
                            [sub_option_id] => 3582
                        )

                )

        )

    [1] => Array
        (
            [order_option_detail] => Array
                (
                    [0] => Array
                        (
                            [option_id] => 1
                            [sub_option_id] => 2
                        )

                )

        )

)

通过查看数据结构,我可以看到数组B包含数组A。如何使用PHP进行相同的分析,即如何检查数组B包含数组A?

如果您知道,请帮助我! 非常感谢!

2 个答案:

答案 0 :(得分:0)

在arrayB中,您只需要'order_option_detail'。

因此,如果我们使用array_column,我们可以将其隔离。

$details = array_column($arrayB, 'order_option_detail');
foreach($details as $detail){ // loop the two items.
    if($detail === $arrayA){
        // Do something
    }
}

https://3v4l.org/TW670

答案 1 :(得分:0)

您可以使用以下函数进行数组比较:

function array_equal($a, $b) {
    if (!is_array($a) || !is_array($b) || count($a) != count($b))
        return false;
    $a = array_map("json_encode", $a);
    $b = array_map("json_encode", $b);
    return array_diff($a, $b) === array_diff($b, $a); // mean both the same values
}

然后将其用作:

$details = array_column($arrayB, 'order_option_detail');
foreach($details as $detail){ // loop the two items.
    if (array_equal($detail, $arrayA)) {
       // Do what ever
    }
}