61 votes

Tri d'un tableau associatif en PHP

J'ai un tableau dans ce format:

 Array
(
    [0] => Array
        (
            [text] => tests
            [language] => 
            [advertiserCompetitionScale] => 5
            [avgSearchVolume] => 7480000
            [lastMonthSearchVolume] => 9140000
        )

    [1] => Array
        (
            [text] => personality tests
            [language] => 
            [advertiserCompetitionScale] => 5
            [avgSearchVolume] => 165000
            [lastMonthSearchVolume] => 201000
        )

    [2] => Array
        (
            [text] => online tests
            [language] => 
            [advertiserCompetitionScale] => 5
            [avgSearchVolume] => 246000
            [lastMonthSearchVolume] => 301000
        )

)
 

Comment puis-je trier un tableau dans ce format, dans l'ordre décroissant du champ avgSearchVolume ? Y at-il une fonction intégrée pour cela?

106voto

Paul Dixon Points 122033

Utilisez usort et fournissez votre propre fonction pour effectuer la commande, par exemple

 function cmp($a, $b)
{
    return $b['avgSearchVolume'] - $a['avgSearchVolume'];
}

usort($array, "cmp");
 

18voto

OIS Points 5566

Jusqu'à PHP 5.3, c'est la meilleure fonction pour trier les sous-clés sans créer de nouvelle fonction pour chaque clé.

 function sortBySubkey(&$array, $subkey, $sortType = SORT_ASC) {
    foreach ($array as $subarray) {
    	$keys[] = $subarray[$subkey];
    }
    array_multisort($keys, $sortType, $array);
}
sortBySubkey($arr, 'avgSearchVolume');
 

Avec PHP 5.3, vous pouvez créer quelque chose comme ceci, même appel de fonction que maintenant.

 function getSortVariable($sortType = SORT_ASC) {
    switch($sortType) {
    	case SORT_ASC:
    		return function ($a, $b) use ($subkey) { return strcmp($a[$subkey], $b[$subkey]); };
    }
}

function sortBySubkey(&$array, $subkey, $sortType = SORT_ASC) {
    $sortFunction = getSortVariable($sortType);
    usort($array, $sortFunction($subkey));
}
 

8voto

Stefan Gehrig Points 47227

Vous devrez utiliser une fonction de rappel personnalisé avec `` .

2voto

Aziz Points 7500

Cela pourrait aider: Tri des tableaux de tableaux

1voto

Prasanth Bendra Points 9618

Voici une autre solution, vous pouvez ajouter plusieurs options de tri (Voir la section commentée du code)

 <?php

$arr=Array(
     Array("text" => "tests","language" =>"","advertiserCompetitionScale" => 5,"avgSearchVolume" => 7480000,"lastMonthSearchVolume" => 9140000),
     Array("text" => "personality tests","language" =>"","advertiserCompetitionScale" => 5,"avgSearchVolume" => 165000,"lastMonthSearchVolume"=>201000),
     Array("text" => "online tests","language" =>"","advertiserCompetitionScale" => 5,"avgSearchVolume" => 246000,"lastMonthSearchVolume" =>301000)
     );


$sort = array();
foreach($arr as $k=>$v) {
    $sort['avgSearchVolume'][$k] = $v['avgSearchVolume'];
    //$sort['text'][$k] = $v['text'];
}

array_multisort($sort['avgSearchVolume'], SORT_DESC, $arr);
//array_multisort($sort['avgSearchVolume'], SORT_DESC, $sort['text'], SORT_ASC,$arr);

echo "<pre>";
print_r($arr);

?>
 

REF: http://php.net/manual/en/function.array-multisort.php

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X