Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.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

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 - Fatal编程技术网

Php 在另一个数组中存在相同值时从数组中删除值

Php 在另一个数组中存在相同值时从数组中删除值,php,arrays,Php,Arrays,我尝试比较两个数组。如果值在第一个数组中至少存在一次,则需要删除其中的值。以下是阵列的外观: array1: { 1: { 0: "1" }, 1: { 0: "1" }, 24: { 0: "24" }, 24: { 0: "24" }, 24: { 0: "24" }, 24: { 0: "24" },

我尝试比较两个数组。如果值在第一个数组中至少存在一次,则需要删除其中的值。以下是阵列的外观:

array1: {
    1: {
        0: "1"
    },
    1: {
        0: "1"
    },
    24: {
        0: "24"
    },
    24: {
        0: "24"
    },
    24: {
        0: "24"
    },
    24: {
        0: "24"
    },
    26: {
        0: "26"
    }
},

array2: {
    1: {
        0: "blue"
    },
    23: {
        0: "yellow"
    },
    24: {
        0: "red"
    },
    26: {
        0: "green"
    }
},
我需要做的是检查array1键,如果array2键中有相同的值,则将它们从array2中删除。因此,对于这个例子,我只应该

array2: {
   23: {
       0: "yellow"
   }
}
我必须对几个看起来相似的阵列的不同实例执行此操作

我试过:

$result = array_diff($array1, $array2);
print_r($result);
这就返回了:

{
    25: {
         0: "25"
    }
}
{
    24: {
         0: "24"
    }
}
{
    24: {
         0: "24"
    }
}
当我意识到它返回这些值时,因为在第一个数组中有它们的倍数。我想知道我怎么能忽视双打。我也不明白为什么23号没有被退回

应该有效:

<?php 
    foreach($array1 as $a1){
        unset($array2[$a1[0]]);
    }
?>

应该可以:

<?php 
    foreach($array1 as $a1){
        unset($array2[$a1[0]]);
    }
?>


您不需要检查元素是否已设置。所以,若条件存在,你们可以删除第3行。对于我自己,我确实需要检查数组的键是否存在。你们不需要检查元素是否被设置。因此,如果条件满足,您可以删除第3行。对于我自己,我确实需要检查是否存在数组键。一个简单的
array\u diff()
可以解决一个普通问题,但看起来您处理的数组包含1个元素的数组,而不是一个包含多个元素的数组。我不知道你是如何让自己陷入这种情况的,但我很确定你应该先查一下,而不是仅仅为了处理这种复杂情况而编写糟糕的大量代码。正如我在原始帖子中所说的,我已经尝试过使用array_diff。我也确实去那里阅读了文档,看看我是否能想出一些办法。我已经试着让这个工作了两天了,这就是为什么我把它贴在这里。另外,我对数组没有太多的控制权。@kamosabe我就是这么说的,
array_diff()
不起作用,因为你不是在比较元素,而是在比较数组,因为你有嵌套在第二层的实际信息。直接将数组与数组进行比较在PHP中不起作用,因此在这种情况下,
array_diff()
是无用的,但真正的问题是,为什么一开始就这样做?@Havenard其中一个数组(array2)我真的无法控制,另一个数组是我用其他元素创建的另一个数组,我现在正在阅读如何使其与无法更改的阵列匹配。谢谢你的评论。我愿意接受您或其他人可能提出的任何其他建议。一个简单的
数组\u diff()
可以解决一个普通问题,但看起来您处理的数组包含一个元素的数组,而不是一个包含多个元素的数组。我不知道你是如何让自己陷入这种情况的,但我很确定你应该先查一下,而不是仅仅为了处理这种复杂情况而编写糟糕的大量代码。正如我在原始帖子中所说的,我已经尝试过使用array_diff。我也确实去那里阅读了文档,看看我是否能想出一些办法。我已经试着让这个工作了两天了,这就是为什么我把它贴在这里。另外,我对数组没有太多的控制权。@kamosabe我就是这么说的,
array_diff()
不起作用,因为你不是在比较元素,而是在比较数组,因为你有嵌套在第二层的实际信息。直接将数组与数组进行比较在PHP中不起作用,因此在这种情况下,
array_diff()
是无用的,但真正的问题是,为什么一开始就这样做?@Havenard其中一个数组(array2)我真的无法控制,另一个数组是我用其他元素创建的另一个数组,我现在正在阅读如何使其与无法更改的阵列匹配。谢谢你的评论。我愿意接受您或其他人可能提出的任何其他建议。