Considere la siguiente matriz asociativamulti-especie de matriz asociativa en PHP
$arr = Array
(
[banana] => 2
[cherry] => 1
[orange] => 3
[grapefruit] => 1
[apple] => 1
)
Quiero a solucionar el problema de una manera que sería similar al término PLSQL: A DESC, B ASC
(donde A es el valor y B es la clave) significado:
$arr = Array
(
[orange] => 3
[banana] => 2
[apple] => 1
[cherry] => 1
[grapefruit] => 1
)
modo que naranja y plátano son primero por el valor, pero luego tengo manzana, cereza y pomelo en orden alfabético, ya que tienen el mismo valor.
lo que he intentado:
1. ksort() para correr y luego asort()/rsort() la esperanza de que el segundo tipo se topará en naranja y plátano para el comienzo de la matriz sin alterar la clasificación alfabética de los otros 3 artículos . Estaba equivocado. lo estropea todo. Así que eché un vistazo:
2. sort functions y array_multisort(). Pero aparentemente ordena varias matrices a la vez, o una matriz multidimensional.
3. También trataron de definir la siguiente función de comparación:
function cmp($a, $b)
{
foreach ($a as $key1 => $val1) {
foreach ($b as $key2 => $val2) {
if($val1 == $val2){
return strcmp($key1,$key2);
}
else if ($val1 > $val2){
return 1;
}
else{ // $val1 < $val2
return -1;
}
}
}
}
y llamarlo con usort() pero también no funcionó.
Así que mi pregunta es: ¿hay un método PHP que implementa el comportamiento solicitado?
Para Eugen:
Lo he probado y no funciona antes de la clasificación:
Array
(
[lamb] => 3
[rule] => 1
[children] => 1
[teacher] => 2
[eager] => 1
)
y después de la clasificación:
Array
(
[children] => 1
[eager] => 1
[rule] => 1
[teacher] => 2
[lamb] => 3
)
¿Cómo va a usar la matriz resultante? – Galen
@Galen de una manera muy sofisticada y poderosa que nunca se vio en la tierra;) – alfasin
En cuanto a su primer enfoque, no funcionó porque la clasificación de PHP no es estable (es decir, mantiene el orden en valores iguales). – Sarke