Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较两个数组并使用php取消设置数组中的任何匹配对?_Php_Arrays_Multidimensional Array_Compare - Fatal编程技术网

比较两个数组并使用php取消设置数组中的任何匹配对?

比较两个数组并使用php取消设置数组中的任何匹配对?,php,arrays,multidimensional-array,compare,Php,Arrays,Multidimensional Array,Compare,我对数组和多维数组非常陌生,我想知道如何比较两个数组的key=>value对,或者一个数组与包含数组的两个不同键?并从匹配键和值的每个数组中取消设置键=>值对 示例阵列: 因此,from是基本键数组,to是比较键数组。 我希望遍历往返键数组,查找匹配的键,并比较两个匹配的值 如果它们的key=>value对匹配,则将key=>value从键数组和键数组中取消设置 如果在to中找到的密钥不在from中,请将其保留在to数组中。但是,如果在“发件人”中找到了一个在“收件人”中找不到的密钥,请将其从“

我对数组和多维数组非常陌生,我想知道如何比较两个数组的key=>value对,或者一个数组与包含数组的两个不同键?并从匹配键和值的每个数组中取消设置键=>值对

示例阵列:

因此,from是基本键数组,to是比较键数组。 我希望遍历往返键数组,查找匹配的键,并比较两个匹配的值

如果它们的key=>value对匹配,则将key=>value从键数组和键数组中取消设置

如果在to中找到的密钥不在from中,请将其保留在to数组中。但是,如果在“发件人”中找到了一个在“收件人”中找不到的密钥,请将其从“发件人”密钥数组中取消设置

将上述阵列转换为如下内容:

Array
(
    [from] => Array
        (
            [group_name] => test adgrp
            [zone_id] => 12
        )

    [to] => Array
        (
            [group_name] => test adgroup
            [zone_id] => 2
            [group_email] => test@group.com
        )

)

@请尝试以下概念:

<?php
    $arr1 = 
            array
            (
                "from" => array
                    (
                        "active" => 1,
                        "airport_ids" => null,
                        "group_name" => "test adgrp",
                        "zone_id" => 12,
                        "creation_time" => 1234567890
                    ),

                "to" => array
                    (
                        "active" => 1,
                        "airport_ids" => null,
                        "group_name" => "test adgroup",
                        "zone_id" => 2,
                        "group_email" => "test@group.com"
                    )

            );

    echo "<pre>";
    print_r($arr1); //before

    foreach($arr1["from"] as $key => $value) {
      foreach($arr1["to"] as $key1 => $value1) {
        if($key == $key1 && $value == $value1){
            unset($arr1["from"][$key], $arr1["to"][$key1]);
            break;
        }

      }
    }
    echo "<pre>";
    print_r($arr1); //after

重复:@mickmackusa是一个多维数组,不是单个数组array@Meta在from和to[group_name]=>test-adgroup中也很常见,所以为什么要在[to]??@BunkerBoy it中使用这个呢?我链接的答案是处理两个数组。如果我读取的数组正确,那么您是在比较$array[from]和$array[to],对吗?可能是重复的原因,即这是首选高于array_diff array的原因,在某些情况下,值是不同的,但并不是真的不同。例如:如果from.active==0且to.active为空或null,从技术上讲,这与系统中的0相同。但是,数组_diff将其作为两个数组之间的一个更改进行拾取。使用上面列出的方法,我可以执行额外的if语句来删除那些特殊情况。@BunkerBoy当满足条件语句并使用unset时,添加一个break;因为没有理由进一步迭代内部循环。如所示@
<?php
    $arr1 = 
            array
            (
                "from" => array
                    (
                        "active" => 1,
                        "airport_ids" => null,
                        "group_name" => "test adgrp",
                        "zone_id" => 12,
                        "creation_time" => 1234567890
                    ),

                "to" => array
                    (
                        "active" => 1,
                        "airport_ids" => null,
                        "group_name" => "test adgroup",
                        "zone_id" => 2,
                        "group_email" => "test@group.com"
                    )

            );

    echo "<pre>";
    print_r($arr1); //before

    foreach($arr1["from"] as $key => $value) {
      foreach($arr1["to"] as $key1 => $value1) {
        if($key == $key1 && $value == $value1){
            unset($arr1["from"][$key], $arr1["to"][$key1]);
            break;
        }

      }
    }
    echo "<pre>";
    print_r($arr1); //after