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)我真的无法控制,另一个数组是我用其他元素创建的另一个数组,我现在正在阅读如何使其与无法更改的阵列匹配。谢谢你的评论。我愿意接受您或其他人可能提出的任何其他建议。