Php 数组\多维数组的唯一性

Php 数组\多维数组的唯一性,php,arrays,Php,Arrays,如果是一个dim数组,我可以使用array\u unique获得唯一的条目。但是,应该使用哪个函数来处理两个dim阵列? 例如: 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的非唯一行。因此,我应该得到前两个条目,而第三个条目应该被删除。怎么做?试试这个

如果是一个dim数组,我可以使用
array\u unique
获得唯一的条目。但是,应该使用哪个函数来处理两个dim阵列? 例如:

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的非唯一行。因此,我应该得到前两个条目,而第三个条目应该被删除。怎么做?

试试这个

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));
试试这个

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));
试试这个:

$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);
试试这个:

$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时,应在数组上使用“SORT_REGULAR\u unique”标志,如下所示:

$matrix = array(
    array(0 => '123', 1 => 'aaa'),
    array(0 => '124', 1 => 'aaa'),
    array(0 => '124', 1 => 'aaa'),
);

var_dump(array_unique($matrix, SORT_REGULAR));

如果数组始终为列1返回相同的值,则当重复列0时,应在数组上使用“SORT_REGULAR\u unique”标志,如下所示:

$matrix = array(
    array(0 => '123', 1 => 'aaa'),
    array(0 => '124', 1 => 'aaa'),
    array(0 => '124', 1 => 'aaa'),
);

var_dump(array_unique($matrix, SORT_REGULAR));

我有一些有效的技巧可以分享。()

如果您不关心结果的顺序,那么这一行将保留第一个唯一的行(基于列值)

代码:

这将反转输入并用重复的第一列值覆盖以前找到的行,因为在同一数组级别中不允许重复键

或者,如果希望保留原始的行顺序,这将提供相同的结果,而无需反转

代码:


使用临时键和
isset()
array\u search()
更有效,因为php搜索键比搜索值更快。

我有一些有效的技术可以分享。()

如果您不关心结果的顺序,那么这一行将保留第一个唯一的行(基于列值)

代码:

这将反转输入并用重复的第一列值覆盖以前找到的行,因为在同一数组级别中不允许重复键

或者,如果希望保留原始的行顺序,这将提供相同的结果,而无需反转

代码:


使用临时键和
isset()
array\u search()
更有效,因为php搜索键的速度比搜索值快。

我认为这没有内置函数,您可能需要自己使用
foreach
来完成此操作。请参阅用户提供的关于可能重复的注释,您希望结果看起来像什么?如果它纯粹基于一个“列”(第二级键),其中始终包含字符串或int值,只需迭代数组并创建一个新的数组,其中根键(第一级的键)是该列的值。这将生成一个数组,其中只剩下在特定列中具有给定值的后面的元素。您可以通过
array\u values()
将结果传递给0,以再次对其进行索引。如果希望使用前面的值而不是后面的值,请添加
isset()
检查循环。但我不会将此作为答案发布,因为这个问题有太多的重复项。我认为没有内置函数用于此操作,您可能需要自己使用
foreach
。请参阅用户提供的关于可能重复项的说明,您希望结果看起来像什么?如果是仅基于一个始终包含字符串或int值的“列”(第二级键),只需迭代数组并创建一个新的数组,其中根键(第一级键)是该列的值。这将生成一个数组,其中只剩下在特定列中具有给定值的后面的元素。您可以通过
array\u values()
将结果传递给0,以再次对其进行索引。如果希望使用前面的值而不是后面的值,请添加
isset()
检查循环。但我不会将此作为答案发布,因为这个问题有太多重复项。如果124 aaa和124 baa,则它认为这些是唯一的行,但我想使它们非唯一并删除其中一行,因为它们具有类似的列0值。但我会接受此答案,因为这只是一个哑光函数中的微小更改。此函数正是我所需要的…(没有前面评论中建议的更改)如果是124 aaa和124 baa,那么它认为这些是唯一的行,但我想让它们非唯一并删除其中一行,因为它们有类似的列0值。但我会接受这个答案,因为这只是函数中的一个小变化。这个函数正是我需要的。。。。(不包括先前评论中的拟议变更)