2014-09-07 3 views
1

uniques je veux trouver les valeurs uniques par nom d'utilisateur:multidisque valeurs PHP

de sorte que le tableau résultant serait [0] =>JakeP, [1]=>TomC

Mon code fonctionne actuellement, mais je me demandais est-il une meilleure façon d'accomplir cette tâche avec moins de boucles, ou using array_unique fonction?

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 
      ) 

    ) 

Mon code qui fonctionne est:

$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']; 
    } 
    } 
} 
} 

Répondre

2

Vous pouvez utiliser la fonction in_array pour simplifier votre code. Exemple:

$names_filter = array(); 

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

fonction vérifie l'existence d'une valeur dans un tableau. La boucle foreach ajoutera donc un nom d'utilisateur de projet au tableau $ names_filter s'il ne se trouve pas dans le tableau. La sortie devrait être une liste de noms d'utilisateurs uniques dans le tableau $ names_filter.

2

Nous pouvons parcourir le $latest_projects et stocker chaque nom d'utilisateur dans un nouveau tableau ($filter). Comme array ne peut pas avoir deux éléments avec les mêmes clés, si la clé existe, elle sera écrasée.

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

$filter = array_keys($filter); 
2

Je ne peux pas parler à la performance de ce rapport à d'autres solutions, mais un effet similaire peut être obtenu avec l'utilisation de array_map et array_unique. Mais ce n'est pas aussi lisible, ce qui est tout aussi important.

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

Si vous utilisez PHP> = 5.5, vous pouvez profiter de la fonction array_column():

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

Avant PHP 5.5, vous pouvez utiliser:

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