Un tableau arrive avec certaines ou toutes les valeurs suivantes, dans n'importe quel ordre. Quelle est la meilleure façon de les commander dans l'ordre croissant de la taille? Donc, en commençant par petit et se terminant par XXL. Je peux usort mais je suis un peu perdu quant à la façon dont les éléments doivent être commandés dans ma fonction définie par l'utilisateurTableau de commande personnalisé PHP
Small
XXL
Medium
Large
XL
EDIT: omis quelques informations ainsi créé une nouvelle question Custom ordering array with key/value pairs
EDIT2: code complet
print_r($sizes);
$sorted_sizes = $this->sort_sizes(array_unique($sizes));
print_r($sorted_sizes);
function sort_sizes($sizes)
{
return uasort($sizes, array($this, 'cmp'));
}
function cmp($a,$b)
{
$sizeArray = array('Small' => 0, 'Medium' => 1, 'Large' => 2, 'XL' => 3, 'XXL' => 4);
return $sizeArray[$a] - $sizeArray[$b];
}
Ce sorties:
Array
(
[66-507cddcd16d9786abafccfa78b19acf8] => XL
[64-507cddcd16d9786abafccfa78b19acf8] => medium
[65-507cddcd16d9786abafccfa78b19acf8] => large
[63-507cddcd16d9786abafccfa78b19acf8] => small
)
et print_r ($ sort ed_sizes) donne juste sortie « 1 »
Dans le cas d'un tableau associé, vous pouvez utiliser 'uasort'. Un exemple: http://www.ideone.com/FjxgY – codaddict
Comment appeler sort_sizes dans usort ($ arr, 'sort_sizes'); si ce sont des méthodes dans une classe? Habituellement j'appelle une fonction via $ this-> sort_sizes mais si je la passe comme un paramètre non-coté, j'obtiens une propriété Undefined: Products :: $ sort_sizes_do. – stef
@stef: Au lieu de 'usort ($ arr, 'sort_sizes');', 'usort ($ arr, array ($ this, 'sort_sizes'));' – BoltClock