我有一个数组,其中的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)));
阵列中样品组:
1条答案
按热度按时间w80xi6nr1#
在填充结果数组时使用复合第一级键。该键必须是两个标识列中的值的组合。
完成迭代后,使用
array_values()
重新索引数组。这一点在这里得到了更普遍的证明:Filter/Remove rows where column value is found more than once in a multidimensional array
空合并赋值运算符将只存储每个组合键的第一个出现的数据。
代码:(Demo)