首页 > 解决方案 > foreach中的Array_diff?

问题描述

我需要比较一些数组的值。这个数组是多维的,我需要比较里面的数组。

这里是转储:

php

    array (size=4)
  1 => 
    array (size=3)
      0 => string '96' (length=2)
      1 => string '90' (length=2)
      2 => string '91' (length=2)
  2 => 
    array (size=3)
      0 => string '96' (length=2)
      1 => string '90' (length=2)
      2 => string '91' (length=2)
  3 => 
    array (size=4)
      0 => string '96' (length=2)
      1 => string '90' (length=2)
      2 => string '91' (length=2)
      3 => string '98' (length=2)
  4 => 
    array (size=4)
      0 => string '96' (length=2)
      1 => string '90' (length=2)
      2 => string '91' (length=2)
      3 => string '98' (length=2)

我想用 , 之类的东西array_diff来比较不同的数组,但是......即使它看起来很愚蠢,我也不知道该怎么做。我想我希望“提取” 4 个数组,以便能够比较它们。

有没有人可以向我解释这样做的好方法?非常感谢。

标签: phploopsdiff

解决方案


<?php

$arr = [
    ['96','90','91'],
    ['96','90','91'],
    ['96','90','91','98'],
    ['96','90','91','98'],
];

$set = [];

foreach ($arr as $values) {
    foreach($values as $each_value){
        if(!isset($set[$each_value])) $set[$each_value] = true;
    }
}

$result = [];

$set = array_keys($set);

foreach ($arr as $values) {
    foreach($set as $value){
        if(!in_array($value,$values)) $result[] = $value;
    }
}

$result = array_unique($result);

print_r($result);

演示: https ://3v4l.org/gMZUR

  • 我们首先让一组元素出现在每个数组中。
  • 稍后,我们再次遍历所有数组,并根据每个数组值检查集合中的每个元素。
  • 如果我们发现集合中的元素不存在于每个单独的子数组中,我们将其添加到result.
  • 请注意,我们可以计算元素的频率并将其与实际数据集的大小进行比较,但重复值可能会导致问题。

推荐阅读