des questions sur le tri de tableau par le temps en php
---array $points----
Array
(
[0] => Array
(
[0] => 2011-10-02 05:30:00
[1] => 20
)
[1] => Array
(
[0] => 2011-10-04 09:30:00
[1] => 12
)
[2] => Array
(
[0] => 2011-10-01 13:30:00
[1] => 25
)
[3] => Array
(
[0] => 2011-10-03 02:30:00
[1] => 31
)
)
J'ai un tableau au-dessus et souhaitez trier ce tableau selon le temps. Ensuite, j'ai utilisé le code suivant pour le tri et le résultat est correct. Cependant, si j'ai changé le code time[$key] = $val[0]
à $time = $val[0]
, le résultat est mauvais.
Est-ce que quelqu'un peut-il m'expliquer cela? Merci beaucoup!
foreach($points as $key=>$val){
$time[$key] = $val[0];
array_multisort($time, SORT_ASC, $points);
}
Essayez ce test: Supprimer la dernière ligne (
C'est à cause de la façon dont
array_mu...
), en commentaire ou quelque chose, et ensuite, imprimez $time
après la foreach
boucle à l'aide de la déclaration time[$key] = $val[0]
. Ensuite, modifiez la ligne de $time = $val[0]
et de voir ce $time
produit après la boucle.C'est à cause de la façon dont
array_multisort
œuvres. Il trie plusieurs tableaux, et lorsque le $time
tableau est trié, le $points
tableau est re-commandé selon les indices de tableau dans $time
. Le array_multisort
doit venir après le foreach
, cependant.
OriginalL'auteur Acubi | 2012-01-03
Vous devez vous connecter pour publier un commentaire.
array_multisort
sortes plus d'un tableau à la fois. Toutefois, il travaille sur un tableau de colonnes, de sorte que leforeach
boucle est nécessaire pour obtenir une colonne à la fois. Après la création de cette liste, vous pouvez alors effectuer la multisort. Le$points
tableau est ordonné selon les indices$times
, comme par cet exemple dans les docs.Cependant, vous n'avez pas besoin d'effectuer le tri à l'intérieur de la
foreach
, cela signifie que le tri se produit 4 fois (dans votre exemple). Il ne doit se produire une fois:OriginalL'auteur cmbuckley
La fonction
uasort()
prend une comparaison de la fonction de rappel. Vous pouvez l'utiliser pour comparer les deux horodateurs.Le code ci-dessus sera de retour
$arr
structure ou quelque chose? Je n'ai pas trouvé que dans le post original. Merci pour le downvote.Ce site est d'aider, pas de dénigrement. On m'a donné vous avez des critiques constructives sur votre code. Si il y a une surcharge, s'il vous plaît dites-moi exactement où il peut être amélioré. Et non, je ne suis pas la création d'une nouvelle
$arr
structure.Soit j'ai pas du tout compris la question, ou je l'ai déjà dit. C'est dans ma réponse.
Non, votre réponse changements de la structure, mine de ne pas, donc je ne vois pas en quoi ma réponse mérite un downvote.
La question n'est pas réellement demander comment le faire. L'OP du code déjà fait. La question est de demander une explication quant à pourquoi.
OriginalL'auteur kba
Ce que vous voulez faire est de (idée de base):
Après cela, vous disposez d'un tableau de
point => time
paires, triés par date. Pour obtenir les points, par exempleksort()
à l'intérieur de la boucle, qui ajoute juste extra surcharge inutile. Aussi, vous êtes en train de changer complètement la structure de la matrice.Vous aviez raison au sujet de la dans la boucle de chose, bien que.
OriginalL'auteur Rijk