por - php order array by field
¿Cómo debo ordenar esta matriz por clave con el usort? (3)
Como sugiere @Tesserex, debe usar la notación de objetos en lugar de la notación de matriz.
Si tuviera los avisos activados, recibiría mensajes de error sobre el acceso a un objeto como una matriz.
Otra cosa a considerar es que sus páginas no tienen todos un atributo ''created_on'', algunos tienen un atributo ''published_on''. Tendrá que hacer algunas comprobaciones de errores / lógica dentro de su método de protección para asegurarse de que la clave que desea ordenar está disponible, y hacer algo cuando no sea así.
Creo que podría haber leído cada artículo de usort
sobre StackOverflow, pero no puedo encontrarlo. ¿Podría ser que usort
no es la herramienta que necesito? Aquí hay un poco del arreglo con el que estoy trabajando (lo tengo asignado a $allPages
):
Array
(
[0] => Page Object
(
[id] => 4
[slug] => articles
[created_on] => 2009-08-06 07:16:00
)
[1] => Page Object
(
[id] => 99
[slug] => a-brief-history
[created_on] => 2011-04-25 12:07:26
)
[2] => Page Object
(
[id] => 98
[slug] => we-arrive
[created_on] => 2011-04-24 13:52:35
)
[3] => Page Object
(
[id] => 83
[slug] => new-year
[created_on] => 2011-01-02 14:05:12
)
)
created_on
finalmente ordenar el valor de created_on
, ¡pero por el momento, me conformaría con poder ordenar cualquiera de ellos! Cuando intento la devolución de llamada de cmp($a, $b)
usort
con el usort
, como, por ejemplo, en esta respuesta en una pregunta de usort , simplemente me sale un espacio en blanco. Ejemplo:
function cmp($a, $b) {
return strcmp($a["slug"], $b["slug"]);
}
usort($allPages, ''cmp'')
Y print_r
no me da nada. Esto es con PHP 5.2.n, no 5.3 por cierto.
Orientación, por favor? ¡Y gracias!
Su volcado de la matriz dice que los elementos son Objetos de Página, no matrices. Por casualidad, ¿necesita decir $a->created_on
lugar de $a[''created_on'']
? Usar notación de objetos en lugar de notación de matriz.
Solo adivinando...
Sus elementos en la matriz son objetos, no matrices asociativas, por lo que debe referirse a ellos de esta manera:
function cmp($a, $b) {
return strcmp($a->slug, $b->slug);
}
usort($allPages, ''cmp'')