从 PHP 中的关联数组中获取唯一值


get the unique values from the associative array in PHP?

我有如下所示的数组

Array
(
    [0] => Array
        (
            [catid] => 3
            [parent_id] => 1
            [catname] => Uncategorized
            [catdesc] => 
            [nleft] => 20
            [nright] => 21
            [nlevel] => 1
        )
    [1] => Array
        (
            [catid] => 5
            [parent_id] => 2
            [catname] => Category 2
            [catdesc] => 
            [nleft] => 7
            [nright] => 8
            [nlevel] => 2
        )
    [2] => Array
        (
            [catid] => 3
            [parent_id] => 1
            [catname] => Uncategorized
            [catdesc] => 
            [nleft] => 20
            [nright] => 21
            [nlevel] => 1
        )
    [3] => Array
        (
            [catid] => 3
            [parent_id] => 1
            [catname] => Uncategorized
            [catdesc] => 
            [nleft] => 20
            [nright] => 21
            [nlevel] => 1
        )
    [4] => Array
        (
            [catid] => 7
            [parent_id] => 2
            [catname] => Flower
            [catdesc] => 
            [nleft] => 11
            [nright] => 18
            [nlevel] => 2
        )
    [5] => Array
        (
            [catid] => 8
            [parent_id] => 7
            [catname] => Lillies
            [catdesc] => 
            [nleft] => 12
            [nright] => 13
            [nlevel] => 3
        )
    [6] => Array
        (
            [catid] => 10
            [parent_id] => 7
            [catname] => Jasmine
            [catdesc] => 
            [nleft] => 16
            [nright] => 17
            [nlevel] => 3
        )
    [7] => Array
        (
            [catid] => 7
            [parent_id] => 2
            [catname] => Flower
            [catdesc] => 
            [nleft] => 11
            [nright] => 18
            [nlevel] => 2
        )
    [8] => Array
        (
            [catid] => 8
            [parent_id] => 7
            [catname] => Lillies
            [catdesc] => 
            [nleft] => 12
            [nright] => 13
            [nlevel] => 3
        )
    [9] => Array
        (
            [catid] => 10
            [parent_id] => 7
            [catname] => Jasmine
            [catdesc] => 
            [nleft] => 16
            [nright] => 17
            [nlevel] => 3
        )
    [10] => Array
        (
            [catid] => 3
            [parent_id] => 1
            [catname] => Uncategorized
            [catdesc] => 
            [nleft] => 20
            [nright] => 21
            [nlevel] => 1
        )
    [11] => Array
        (
            [catid] => 3
            [parent_id] => 1
            [catname] => Uncategorized
            [catdesc] => 
            [nleft] => 20
            [nright] => 21
            [nlevel] => 1
        )
    [12] => Array
        (
            [catid] => 10
            [parent_id] => 7
            [catname] => Jasmine
            [catdesc] => 
            [nleft] => 16
            [nright] => 17
            [nlevel] => 3
        )
    [13] => Array
        (
            [catid] => 3
            [parent_id] => 1
            [catname] => Uncategorized
            [catdesc] => 
            [nleft] => 20
            [nright] => 21
            [nlevel] => 1
        )
    [14] => Array
        (
            [catid] => 8
            [parent_id] => 7
            [catname] => Lillies
            [catdesc] => 
            [nleft] => 12
            [nright] => 13
            [nlevel] => 3
        )
)

从这个数组中,我想得到唯一 Arrays.ie。如果 catId 相同,则需要从列表中删除。我该怎么做?

如果您使用的是旧版本:

$out = array();
foreach ($arr as $row) {
    $out[$row['catid']] = $row;
}
$array = array_values($out); // only required if you mind the new array being assoc

假设你使用的是PHP>5.3,你可以使用array_filter

$catIds = array();
$myarray = array_filter($myarray, function($el) use (&$catIds) {
    if (in_array($el['catid'], $catIds)) { // if the id has already been seen
        return false; // remove it
    } else {
        $catIds[] = $el['catid']; // the id has now been seen
        return true; // but keep the first occurrence of it
    }
});

你从哪里得到那个数组(假设它没有神奇地出现)?如果您从数据库中获取这些结果,那么将它们限制在那里不是更容易?例如

SELECT DISTINCT cat_id, parent_id, catname FROM yourtable;

您可以使用它来将多维数组转换为单个数组。

$out = array();
for($i=0;$i<count($rows);$i++) {
    $out = $rows[$i];
}

你可以通过以下方式检查这一点

print_r($out);