0

如果是单色数组,我可以使用它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 列删除非唯一行。因此,我应该得到前两个条目,而第三个条目应该被删除。这个怎么做?

4

4 回答 4

2

尝试这个:

$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);
于 2012-07-25T19:00:48.290 回答
1

如果您的数组总是为第 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));
于 2012-07-25T20:08:56.073 回答
1

尝试这个...

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));
于 2012-07-25T18:01:12.353 回答
0

我有几个有效的技术要分享。(演示

如果您不关心结果的顺序,则此单行将保留第一个唯一行(基于列值)。

代码:

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 搜索键比值更快更有效。

于 2019-12-24T04:02:57.173 回答