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

3

我有以下这样的数组:

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
        )

)

我想从这个数组中获取唯一的数组。也就是说,如果catId相同,则需要从列表中删除。我该怎么做?

4个回答

11

如果您使用的是旧版本:

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

2

假设您使用的是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
    }
});

这个程序相关的内容应该这样翻译:为了让这个程序正常工作,$catIds不应该被传值调用吗?否则,$catIds将总是被重置为空数组。回调函数应该像这样:function($el) use (&$catIds) { ... } - Erik Töyrä Silfverswärd

0

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

SELECT DISTINCT cat_id, parent_id, catname FROM yourtable;

0

您可以使用此功能将多维数组转换为单一数组。

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

你可以通过以下方式进行检查

print_r($out);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接