2011-05-17 55 views
2

我有类似下面从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相同,则需要从列表中消除。 我该怎么做?

回答

10

如果您使用的是旧版本:

$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 
    } 
}); 
+0

检查这不应该''$ catIds''be通过此引用传递的工作? ''catIds''将始终被重置为空数组。回调函数应该像''function($ el)use(&$ catIds){...}''。 – 2013-07-23 14:39:18

0

你从哪里得到这个数组(假设它不会奇迹般地出现)?如果你从数据库中得到这些结果,难道不是很多更容易限制它们吗?例如。

SELECT DISTINCT cat_id, parent_id, catname FROM yourtable; 
0

您可以使用它将Convert Multidimentional数组转换为Single数组。

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

,您可以通过

print_r($out);