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);