Php 如何在数组中查找和删除重复的值?
我已经问过类似的问题,但他们似乎误解了我。我保证我会学着问更详细的问题。 必须显示此多维数组,但不能重复Php 如何在数组中查找和删除重复的值?,php,Php,我已经问过类似的问题,但他们似乎误解了我。我保证我会学着问更详细的问题。 必须显示此多维数组,但不能重复 array (size=3) 0 => array (size=3) 'cards1' => array (size=3) 0 => string 'A' 1 => string 'b' 2 => string 'c' 'cards2' =&g
array (size=3)
0 =>
array (size=3)
'cards1' =>
array (size=3)
0 => string 'A'
1 => string 'b'
2 => string 'c'
'cards2' =>
array (size=3)
0 => string 'A'
1 => string 'e'
2 => string 'd'
'cards3' =>
array (size=3)
0 => string 'A'
1 => string 'o'
2 => string 'l'
1 =>
array (size=3)
'cards1' =>
array (size=3)
0 => string 'A'
1 => string 'b'
2 => string 'c'
'cards2' =>
array (size=3)
0 => string 'A'
1 => string 'r'
2 => string 'c'
'cards3' =>
array (size=3)
0 => string 'A'
1 => string 'bbb'
2 => string 'yyy'
2 =>
array (size=3)
'cards1' =>
array (size=3)
0 => string 'A'
1 => string 'bbb'
2 => string 'ggg'
'cards2' =>
array (size=1)
0 => string 'A'
'cards3' =>
array (size=1)
0 => string 'A'
结果
array (size=3)
0 =>
array (size=3)
'cards1' =>
array (size=3)
0 => string 'A'
1 => string 'b'
2 => string 'c'
'cards2' =>
array (size=2)
1 => string 'e'
2 => string 'd'
'cards3' =>
array (size=2)
1 => string 'o'
2 => string 'l'
1 =>
array (size=3)
'cards1' =>
array (size=1)
0 => string 'A'
'cards2' =>
array (size=1)
1 => string 'r'
'cards3' =>
array (size=3)
1 => string 'bbb'
2 => string 'yyy'
2 =>
array (size=3)
'cards1' =>
array (size=1)
0 => string 'WWW'
array (size=3)
2 => string 'ggg'
'cards2' =>
'cards3' =>
数组中不应该有重复。
数组中可以有2个、4个和10个元素
数组大小可以是4、10、100
假设数组为$result\u arr
$final_arr = $val_arr = [];
foreach ($resul_arr as $key => $value) {
foreach ($value as $k => $v) {
$new_arr = [];
foreach ($v as $s) {
if (!in_array($s, $val_arr)) {
$new_arr[] = $s;
}
$val_arr[] = $s;
}
$final_arr[$key][$k] = $new_arr;
$val_arr = array_unique($val_arr);
}
}
echo "Final Array is";
var_dump($final_arr);
应用基本的foreach循环。循环所有值并维护一个关联数组,其中像“A”、“b”等值是该关联数组的键。在我的代码中,我称之为
$set
。现在,如果值存在于带有check的$set
中,则取消设置它,否则将迭代中的当前值添加到set中。请注意,我使用了&
来编辑数组的相同引用,而不是克隆的引用
<?php
$arr = [
[
'cards1' => [
'A',
'b',
'c'
],
'cards2' => [
'A',
'e',
'd'
],
'cards3' => [
'A',
'o',
'l'
]
],
[
'cards1' => [
'A',
'b',
'c'
],
'cards2' => [
'A',
'r',
'c'
],
'cards3' => [
'A',
'bbb',
'yyy'
]
],
[
'cards1' => [
'A',
'bbb',
'ggg'
],
'cards2' => [
'A',
],
'cards3' => [
'A',
]
]
];
$set = [];
foreach($arr as &$data){
foreach($data as &$cards){
foreach($cards as $index => $value){
if(isset($set[$value])) unset($cards[$index]);
else $set[$value] = true;
}
}
}
print_r($arr);
使用array\u unique($your\u array)
。它将过滤重复的值。希望你能找到最好的结果。但它写在什么索引上。他删除了邮件所在的位置,但我需要将这三个都传递给你,如果你想让我们帮忙的话,那就让我们很容易帮上忙。发布数组的打印或变量转储对我们来说并不容易。使用var_exprot或json_encode。只需将输出的每个值放入一个平面数组中,然后在输出下一个值之前,使用in_array
检查它是否包含在该平面数组中?因此我尝试了,但它不起作用`$has=array()$输出=数组();foreach($newUser as$data){if(!in_array($data['cards1'][1],$has)){$has[]=$data['cards1'][1];$output[]=$data;}}}}`在那里一个接一个,我需要这样在12和在cards1 cards2中就不能使用[]来读取$final_arr=$val_arr[];刚刚更新了答案。忘记添加“=”不,它不工作,它仍然会重复values@josef我又编辑了一遍,有点小变化。请用编辑过的代码再试一次好吗?好极了,非常感谢。))我怎么能把他没有考虑到的指数变成零呢,拜托。这样它就不会碰到任何地方1[0]
<?php
$arr = [
[
'cards1' => [
'A',
'b',
'c'
],
'cards2' => [
'A',
'e',
'd'
],
'cards3' => [
'A',
'o',
'l'
]
],
[
'cards1' => [
'A',
'b',
'c'
],
'cards2' => [
'A',
'r',
'c'
],
'cards3' => [
'A',
'bbb',
'yyy'
]
],
[
'cards1' => [
'B',
'bbb',
'B'
],
'cards2' => [
'B',
],
'cards3' => [
'B',
]
]
];
$set = [];
$except = [];
foreach($arr as $data){
foreach($data as $key => $cards){
if($key === 'cards1'){
$except[$data[$key][0]] = true;
break;
}
}
}
foreach($arr as &$data){
foreach($data as $key => &$cards){
foreach($cards as $index => $value){
if(isset($set[$value]) && !isset($except[$value])) unset($cards[$index]);
else $set[$value] = true;
}
}
}
print_r($arr);