sort rsort objects multidimensional array php arrays sorting

objects - rsort php



¿Cómo muevo un elemento de matriz con una clave conocida al final de una matriz en PHP? (4)

La única forma en que puedo pensar para hacer esto es eliminarlo y luego agregarlo:

$v = $my_array[''monkey'']; unset($my_array[''monkey'']); $my_array[''monkey''] = $v;

Tener una congelación cerebral sobre un problema bastante trivial. Si comienzo con una matriz como esta:

$my_array = array( ''monkey'' => array(...), ''giraffe'' => array(...), ''lion'' => array(...) );

... y los nuevos elementos pueden agregarse con diferentes claves pero siempre con un valor de matriz. Ahora puedo estar seguro de que el primer elemento siempre tendrá la clave ''mono'', pero no puedo estar seguro de ninguna de las otras teclas.

Cuando termine de llenar la matriz, quiero mover el elemento conocido ''mono'' al final de la matriz sin alterar el orden de los otros elementos. ¿Cuál es la forma más eficiente de hacer esto?

Cada forma en que puedo pensar parece un poco torpe y siento que me falta algo obvio.


Me gusta mucho la respuesta de @ Gordon por su elegancia como un trazador de líneas, pero solo funciona si la clave está al principio. Aquí hay otro trazador de líneas que funcionará para una llave en cualquier posición:

$arr = array(''monkey'' => 1, ''giraffe'' => 2, ''lion'' => 3); $arr += array_splice($arr,array_search(''giraffe'',array_keys($arr)),1);


Puede implementar algunos cálculos básicos y obtener una función universal para mover el elemento de matriz de una posición a otra.

Para PHP se ve así:

function magicFunction ($targetArray, $indexFrom, $indexTo) { $targetElement = $targetArray[$indexFrom]; $magicIncrement = ($indexTo - $indexFrom) / abs ($indexTo - $indexFrom); for ($Element = $indexFrom; $Element != $indexTo; $Element += $magicIncrement){ $targetArray[$Element] = $targetArray[$Element + $magicIncrement]; } $targetArray[$indexTo] = $targetElement; }

Echa un vistazo a "mover elementos de matriz" en "gloommatter" para una explicación detallada.

http://www.gloommatter.com/DDesign/programming/moving-any-array-elements-universal-function.html


array_shift es probablemente menos eficiente que deshacer el índice , pero funciona:

$my_array = array(''monkey'' => 1, ''giraffe'' => 2, ''lion'' => 3); $my_array[''monkey''] = array_shift($my_array); print_r($my_array);

Otra alternativa es con una devolución de llamada y uksort :

uksort($my_array, create_function(''$x,$y'',''return ($y === "monkey") ? -1 : 1;''));

Querrá utilizar un lambda adecuado si está utilizando PHP5.3 + o simplemente defina la función como una función global regularmente.