sort por ordenar objetos fecha campo arreglos arreglo array_multisort array php arrays object sorting key

por - ordenar un arreglo de arreglos php



Ordenar una matriz de una matriz de objetos en PHP por valor clave (5)

Podría estar equivocado, pero creo que hice algo así usando asort () (o asort ()). Estaba en una función de búsqueda, donde necesitaba ordenar una matriz bidimensional llena de índices y marcas de tiempo.

No estoy seguro de si funcionará en su caso, y lo hice hace mucho tiempo. Sin embargo, quizás te haga comenzar, buena suerte.

Básicamente tengo una configuración como la siguiente:

Array ( [0] => Array ( [0] => stdClass Object ( [nid] => 1 [title] => title1 [uid] => 1 [parent] => 0 [weight] => -15 [name] => name1 [value] => 0 ) [1] => stdClass Object ( [nid] => 2 [title] => title2 [uid] => 1 [parent] => 0 [weight] => -7 [name] => name2 [value] => 100 ) [2] => stdClass Object ( [nid] => 3 [title] => title3 [uid] => 2 [parent] => 0 [weight] => -1 [name] => name3 [value] => 0 ) [3] => stdClass Object ( [nid] => 4 [title] => title4 [uid] => 2 [parent] => 0 [weight] => 1 [name] => name4 [value] => 80 ) ) )

Lo que necesito es una forma de ordenar todas las matrices dentro de la matriz principal mediante la tecla [valor] en el objeto. He estado probando durante aproximadamente 2 días con el servicio y diferentes métodos, pero parece que no puedo entenderlo. La tecla [valor] oscilará entre 0 y 100 y necesito que todas las matrices estén ordenadas en orden decreciente (IE: 100 hasta 0).


function cmp($a, $b) { return $b->value - $a->value; } $ary[0] = usort($ary[0], "cmp");

Para ordenar una matriz basada en cualquier cosa que no sea valor simple o clave, debe usar la función de usort y proporcionar su propia comparación. Las funciones de comparación deben definirse de manera que si $a viene antes de $b , se devuelve un valor positivo y uno negativo si $b viene antes de $a (o cero si son iguales). Como está comparando en función de los valores numéricos y desea una ordenación inversa, la forma más sencilla de hacerlo es restar el ''valor'' de $a del valor de $b .


Una forma de hacerlo es separar la matriz de valores de la matriz de objetos y, por lo tanto, crear dos matrices. Luego puede usar array_multisort para ordenar la matriz de objetos de acuerdo con la otra matriz. Aquí hay un ejemplo:

<?php $array1 = $objectvalues $array2 = array(ObjectWithNid1, ObjectWithNid2, ObjectWithNid3, ObjectWithNid4); array_multisort($array1, $array2); ?>

Puede usar un foreach para recorrer la matriz una vez y crear una nueva matriz con la clave [valor] correspondiente:

<?php foreach( $arraywithobjects as $obj ) { $objectvalues[] = $obj->getValue(); } ?>

Esto obtendrá el valor del Objeto e insertándolo en otra matriz que puede usar con el multisort.

Al final, su código se verá así:

<?php foreach( $arraywithobjects as $obj ) { $objectvalues[] = $obj->getValue(); } $array2 = array(ObjectWithNid1, ObjectWithNid2, ObjectWithNid3, ObjectWithNid4); array_multisort($objectvalues, $array2); ?>

La primera matriz en el campo array_multisort debe ser la matriz que está utilizando para ordenar la segunda matriz.

También puede agregar otro método de clasificación para esto. Puedes leerlos aquí: enlace de texto


Use usort :

function cmp($a, $b) { if ($a->value == $b->value) { return 0; } else { return $a->value < $b->value ? 1 : -1; // reverse order } } usort($arr, ''cmp'');


100% robado de la primera respuesta en esta página. http://us.php.net/manual/en/function.array-multisort.php
Pero esto es lo que estaba buscando.

multisort una matriz de objetos:

example object [$object with array of objects]: (class: test) ---------------------------------- test Object ( [Artikel] => Array ( [0] => test Object ( [id] => 1 [title] => CCCC ) [1] => test Object ( [id] => 2 [title] => AAAA ) [2] => test Object ( [id] => 3 [title] => DDDD ) [3] => test Object ( [id] => 4 [title] => BBBB ) ) ) ---------------------------------- Simple PHP function: sort_arr_of_obj() <?php // -------------------------------------- /* * -------- function arguments -------- * $array ........ array of objects * $sortby ....... the object-key to sort by * $direction ... ''asc'' = ascending * -------- */ function sort_arr_of_obj($array, $sortby, $direction=''asc'') { $sortedArr = array(); $tmp_Array = array(); foreach($array as $k => $v) { $tmp_Array[] = strtolower($v->$sortby); } if($direction==''asc''){ asort($tmp_Array); }else{ arsort($tmp_Array); } foreach($tmp_Array as $k=>$tmp){ $sortedArr[] = $array[$k]; } return $sortedArr; } // -------------------------------------- ?> example call: ---------------------------------- <?php $sorted->Artikel = sort_arr_of_obj($object->Artikel,''title'',''asc''); ?> example result: $sorted (class: test) ---------------------------------- test Object ( [Artikel] => Array ( [0] => test Object ( [id] => 2 [title] => AAAA ) [1] => test Object ( [id] => 4 [title] => BBBB ) [2] => test Object ( [id] => 1 [title] => CCCC ) [3] => test Object ( [id] => 3 [title] => DDDD ) ) )