如果是单色数组,我可以使用它array_unique
来获取唯一条目。但是应该使用哪个函数来处理二维数组?例如:
Array[0][0] = '123'; Array[0][1] = 'aaa';
Array[1][0] = '124'; Array[1][1] = 'aaa';
Array[2][0] = '124'; Array[2][1] = 'aaa';
在上面的示例中,我需要根据第 0 列删除非唯一行。因此,我应该得到前两个条目,而第三个条目应该被删除。这个怎么做?
尝试这个:
$matrix = array(
0 => array(0 => '123', 1 => 'aaa'),
1 => array(0 => '124', 1 => 'aaa'),
2 => array(0 => '124', 1 => 'aaa'),
3 => array(0 => '124', 1 => 'aaa'),
4 => array(0 => '114', 1 => 'aaa'),
5 => array(0 => '124', 1 => 'aaa'),
6 => array(0 => '124', 1 => 'aaa'),
7 => array(0 => '124', 1 => 'aaa'),
8 => array(0 => '124', 1 => 'aaa'),
9 => array(0 => '124', 1 => 'baa'),
10 => array(0 => '123', 1 => 'baa'),
11 => array(0 => '1241', 1 => 'baa'),
);
$d = array();
foreach ($matrix AS $key => $value) {
if (!array_search($value, $d)) {
$d[] = $matrix[$key];
}
}
var_dump($d);
如果您的数组总是为第 1 列返回相同的值,那么当第 0 列重复时,您应该在 array_unique 上使用标志 SORT_REGULAR,如下所示:
$matrix = array(
array(0 => '123', 1 => 'aaa'),
array(0 => '124', 1 => 'aaa'),
array(0 => '124', 1 => 'aaa'),
);
var_dump(array_unique($matrix, SORT_REGULAR));
尝试这个...
function unique_matrix($matrix) {
$matrixAux = $matrix;
foreach($matrix as $key => $subMatrix) {
unset($matrixAux[$key]);
foreach($matrixAux as $subMatrixAux) {
if($subMatrix === $subMatrixAux) {
// Or this
//if($subMatrix[0] === $subMatrixAux[0]) {
unset($matrix[$key]);
}
}
}
return $matrix;
}
$matrix = array(
0 => array(0 => '123', 1 => 'aaa'),
1 => array(0 => '124', 1 => 'aaa'),
2 => array(0 => '124', 1 => 'aaa'),
);
var_dump(unique_matrix($matrix));
我有几个有效的技术要分享。(演示)
如果您不关心结果的顺序,则此单行将保留第一个唯一行(基于列值)。
代码:
var_export(array_reverse(array_column(array_reverse($array), null, 0)));
这会反转输入并用重复的第一列值覆盖先前找到的行——因为在同一数组级别中不允许重复键。
或者,如果您想保留行的原始顺序,这将提供相同的结果而不会反转。
代码:
$result = [];
foreach ($array as $row) {
if (!isset($result[$row[0]])) {
$result[$row[0]] = $row;
}
}
var_export(array_values($result));
使用临时键isset()
比array_search()
php 搜索键比值更快更有效。