php 如何通过比较每个集合中的两个值来删除多维数组中的重复项,

svmlkihl  于 2022-12-10  发布在  PHP
关注(0)|答案(1)|浏览(155)

我有一个数组,其中的vehicle_code、year和vehicle_code在数组中的同一年重复。我想删除数组中重复的vehicle_code和year值。我尝试了许多数组函数,如in_array array_column array_search等。但所有示例仅显示如何删除1列中的重复项,但我需要比较每组中两列的值。

0 => array:2 [
    0 => "AUA3H147"
    1 => 2015
    2 => Audi
    3 => 12457
  ]
  1 => array:2 [
    0 => "AUA3H147"
    1 => 2015
    2 => tata
    3 => 16832545
  ]

  2 => array:2 [
    0 => "AUA3H148"
    1 => 2016
    2 => tata
    3 => 55555
  ]
  3 => array:2 [
    0 => "AUA3H148"
    1 => 2017
    2 => Audi
    3 => 55555
  ]

我需要像下面这样的输出:

0 => array:2 [
    0 => "AUA3H147"
    1 => 2015
    2 => Audi
    3 => 12457
  ]
  1 => array:2 [
    0 => "AUA3H148"
    1 => 2016
    2 => tata
    3 => 16832545
  ]
  2 => array:2 [
    0 => "AUA3H148"
    1 => 2017
    2 => tata
    3 => 55555
  ]

我试过

$newArray = array(); 
$addArrayValues = array(); 
$priceVehicleYearCounter = 0
foreach ( $excelPriceArr as $key => $line ) { 
if ( (!in_array($line[0], $addArrayValues)) && (!in_array($line[1], $addArrayValues)) ) { 
      $addArrayValues[$priceVehicleYearCounter] = array(
      'id' => $priceVehicleYearCounter,
      'vehicle_code' => $line[0],
      'year' => $line[1],
      );
      $priceVehicleYearCounter++;
      $newArray[$priceVehicleYearCounter] = $line; 
   }
}

我看到了相同的单列搜索示例,我修改了它以搜索两个值,但它不起作用

if(array_search($line, array_column($addArrayValues, 'vehicle_code','year')) == false) {
                                $addArrayValues[$priceVehicleYearCounter] = array(
                                    'id' => $priceVehicleYearCounter,
                                    'vehicle_code' => $line[0],
                                    'year' => $line[1],
                                );
                                $priceVehicleYearCounter++;
                                $newArray[$priceVehicleYearCounter] = $line;
                            }

也是这样:

$result = array_unique($addArrayValues, SORT_REGULAR);

$result = array_map("unserialize", array_unique(array_map("serialize", $addArrayValues)));

阵列中样品组:

w80xi6nr

w80xi6nr1#

在填充结果数组时使用复合第一级键。该键必须是两个标识列中的值的组合。
完成迭代后,使用array_values()重新索引数组。
这一点在这里得到了更普遍的证明:Filter/Remove rows where column value is found more than once in a multidimensional array
空合并赋值运算符将只存储每个组合键的第一个出现的数据。
代码:(Demo

foreach ($array as $row) {
    $compositeKey = $row[0] . '_' . $row[1];
    $result[$compositeKey] ??= $row;      // only store if first occurrence of compositeKey
}
var_export(array_values($result));  // re-index and print

相关问题