objetos - PHP: ordenar una matriz por la longitud de sus valores?
php order array by field (8)
Además de la respuesta aceptada, para ordenar una matriz por longitud con orden ascendente u descendente :
function strlen_compare($a,$b){
if(function_exists(''mb_strlen'')){
return mb_strlen($b) - mb_strlen($a);
}
else{
return strlen($b) - strlen($a);
}
}
function strlen_array_sort($array,$order=''dsc''){
usort($array,''strlen_compare'');
if($order==''asc''){
$array=array_reverse($array);
}
return $array;
}
Hice una máquina de anagramas y tengo una variedad de coincidencias positivas. El problema es que todos están en un orden diferente, quiero poder ordenar la matriz para que los valores más largos de la matriz aparezcan primero.
¿Alguien tiene alguna idea sobre cómo hacer esto?
Es sencillo.
function LSort(a,b){return a.length-b.length;}
var YourArray=[[1,2,3,4,5,6], [''a'',''b''], [''X'',''Y'',''Z''], [''I'',''Love'',''You''], [''good man'']];
YourArray.sort(Lsort);
Resultado:
[''good man''] Length=1
[''a'',''b''] Length=3
[''X'',''Y'',''Z''] Length=3
[''I'',''Love'',''You''] Length=3
[1,2,3,4,5,6] Length=6
Esta es una forma en que lo hice en el pasado.
// Here''s the sorting...
$array = array_combine($words, array_map(''strlen'', $words));
arsort($array);
Haz una variedad de strlen
de elementos de la matriz oyur, y multisort
con tu array.
foreach($Yourarray as $c=>$key) {
$key[''maxlen''] = strlen($key);
$sort_numcie[] = $key[''maxlen''];
}
array_multisort($sort_numcie, $Yourarray);
Esto definitivamente funcionará. ¡Estoy seguro!
PHP7 viene. En PHP7, puede usar el Operador de nave espacial .
usort($array, function($a, $b) {
return strlen($b) <=> strlen($a);
});
Espero que esto pueda ayudarte en el futuro.
Si desea hacerlo de la forma PHP 5.3, es posible que desee crear algo como esto:
usort($array, function($a, $b) {
return strlen($b) - strlen($a);
});
De esta forma no contaminarás tu espacio de nombre global.
Pero haga esto solo si lo necesita en un solo lugar en su código fuente para mantener las cosas SECAS.
Use http://us2.php.net/manual/en/function.usort.php
con esta función personalizada
function sort($a,$b){
return strlen($b)-strlen($a);
}
usort($array,''sort'');
Use uasort si desea conservar los índices anteriores, use el uso de la red si no le importa.
Además, creo que mi versión es mejor porque usort es inestable.
$array = array("bbbbb", "dog", "cat", "aaa", "aaaa");
// mine
[0] => bbbbb
[1] => aaaa
[2] => aaa
[3] => cat
[4] => dog
// others
[0] => bbbbb
[1] => aaaa
[2] => dog
[3] => aaa
[4] => cat
function sortByLength($a,$b){
if($a == $b) return 0;
return (strlen($a) > strlen($b) ? -1 : 1);
}
usort($array,''sortByLength'');