数组唯一值PHP

时间:2014-09-07 18:54:45

标签: php arrays

我想通过用户名找到唯一值:

因此生成的数组将为[0] =>JakeP, [1]=>TomC

我的代码目前有效,但我想知道是否有更好的方法可以通过更少的循环或using array_unique函数完成此任务?

  Array
    (
        [0] => Array
            (
                [ID] => 3
                [Username] => TomC
                [Project_Name] => Inventory
            )

        [1] => Array
            (
                [ID] => 4
                [Username] => JakeP
                [Project_Name] => Inventory
            )

        [2] => Array
            (
                [ID] => 2
                [Username] => TomC
                [Project_Name] => Stocks

            )

        [3] => Array
            (
                [ID] => 1
                [Username] => Tomc
                [Project_Name] => Stocks
            )

    )

我的代码有效:

$names_filter = array();
foreach($latest_projects as $project)
{
if(empty($names_filter)) 
{ 
$names_filter[] = $project['Username']; 
}
else {
foreach($names_filter as $key=>$value)
 { 
 if($value == $project['Username'])
   { break; }
 else
   {
    $names_filter[] = $project['Username'];
   }
  }
}
}

4 个答案:

答案 0 :(得分:3)

如果你使用PHP> = 5.5,你可以利用array_column()函数:

$uniqueNames = array_unique(
    array_column($myArray, 'Username')
);

在PHP 5.5之前,您可以使用:

$uniqueNames = array_unique(
    array_map(
        function($value) {
            return $value['Username'];
        },
        $myArray
    )
);

答案 1 :(得分:2)

您可以使用in_array功能来简化代码。例如:

$names_filter = array();

foreach($latest_projects as $project)
{
    if(!in_array($project['Username'], $names_filter))
    {
        $names_filter[] = $project['Username'];
    }
}

in_array()函数检查数组中是否存在值。所以foreach循环只会在$ names_filter数组中添加一个项目用户名,如果它不在数组中的话。输出应该是$ names_filter数组中唯一用户名的列表。

答案 2 :(得分:2)

我们可以遍历$latest_projects并将每个用户名存储到新数组($filter)。由于数组不能有两个具有相同键的元素,如果该键存在,它将被覆盖。

$filter = array();
foreach ($latest_projects  as $project) 
{
    $filter[$project['Username']] = 1;    
}

$filter = array_keys($filter);

答案 3 :(得分:2)

我无法谈论其他解决方案的表现,但使用array_maparray_unique可以达到类似的效果。但它并不是那么可读,这同样重要。

$uniqueUsers = array_unique(array_map(function ($p) { return $p['Username']; }, $latest_projects));