Question Trier le tableau multidimensionnel php par sous-valeur [dupliquer]


Cette question a déjà une réponse ici:

J'ai ce tableau

Array
(
[data] => Array
    (
        [0] => Array
            (

                [id] => 1293005125
                [viewed] => TRUE
                [active] => TRUE
                [time] => December 22, 2010 13:00 hours
                [timestamp] => 1293006034
                [initial_timestamp] => 1293005125
                [user] => administrator
            )

        [1] => Array
            (

                [mid] => 1293001908
                [viewed] => TRUE
                [active] => TRUE
                [time] => December 22, 2010 13:00 hours
                [timestamp] => 1293001908
                [initial_timestamp] => 1293001908
                [user] => administrator
            )

        [2] => Array
            (

                [mid] => 1293009999
                [viewed] => TRUE
                [active] => TRUE
                [time] => December 22, 2010 13:00 hours
                [timestamp] => 1293009999
                [initial_timestamp] => 1293009999
                [user] => administrator
            )

        [3] => Array
            (

                [mid] => 1293006666
                [viewed] => TRUE
                [active] => TRUE
                [time] => December 22, 2010 13:00 hours
                [timestamp] => 1293006666
                [initial_timestamp] => 1293006666
                [user] => administrator
            )

        [4] => Array
            (

                [mid] => 1293005125
                [viewed] => TRUE
                [active] => TRUE
                [time] => December 22, 2010 13:00 hours
                [timestamp] => 1293006125
                [initial_timestamp] => 1293005125
                [user] => administrator2
            )


    )

Maintenant, je voudrais trier ce tableau par [mid] Comment puis-je faire cela?

Actuellement, je trie ceci dans une boucle foreach
Il doit y avoir une meilleure façon

MODIFIER J'espérais sortir quelque chose comme

[mid] key => array value

Merci


30
2017-12-22 10:18


origine


Réponses:


Vous pouvez utiliser le usort fonction.

function cmp($a, $b) {
        return $a["mid"] - $b["mid"];
}
usort($arr, "cmp");

Le voir


53
2017-12-22 10:20



L'autre solution utilise array_multisort

<?php
// Obtain a list of columns
foreach ($data as $key => $row) {
    $mid[$key]  = $row['mid'];
}

// Sort the data with mid descending
// Add $data as the last parameter, to sort by the common key
array_multisort($mid, SORT_DESC, $data);
?>

33
2017-12-22 11:45



Mettre à jour

j'ai récemment répondu cette question d'une manière beaucoup plus efficace dans le sujet "définitif" sur le tri des tableaux multidimensionnels. La réponse ci-dessous cible les anciennes versions de PHP (5.2 et antérieures); Bien que le concept soit solide, il existe de nos jours de meilleures façons de faire les choses. Lisez plutôt les réponses sur d'autres questions.

Réponse originale (très obsolète)

usort est là pour exactement cette situation. Si vous avez également besoin de conserver les clés, la fonction appropriée serait uasort.

Par exemple:

usort($array, create_function('$a, $b',
   'if ($a["mid"] == $b["mid"]) return 0; return ($a["mid"] < $b["mid"]) ? -1 : 1;'));

Bien sûr, si cela ne vous dérange pas, vous pouvez déclarer la fonction de comparaison correctement:

function compareMid($a, $b)
{
    if ($a['mid'] == $b['mid']) {
        return 0;
    }
    return ($a['mid'] < $b['mid']) ? -1 : 1;
}

Et l'utiliser comme ça:

usort($array, 'compareMid');

Tout cela se trouve dans la documentation.


5
2017-12-22 10:21