¿Cómo ordenar una matriz según la matriz de entrada?

Tengo problemas para ordenar una matriz según otra matriz. Probé usort, uksort y uasort pero no llego a ninguna parte. Otras preguntas sobre stackoverflow no son directamente aplicables aquí, ya que la estructura de mi matriz es diferente. Quiero ordenar esta matriz multidimensional:

$main = Array (
    [Technology] => Array ()
    [World] => Array ()
    [Europe] => Array () 
)

Mediante el uso de esta matriz de índice:

$index = Array (
    [0] => Europe
    [1] => Technology
    [2] => World
)

Básicamente, en este ejemplo, me gustaría que Europa ocupe el primer lugar en la matriz $principal, la tecnología en segundo lugar y el mundo en tercer lugar, ya que este es su posicionamiento en la matriz $index. ¿Cómo puedo hacer eso? (Ignore los pequeños errores de sintaxis en las matrices anteriores)

preguntado el 22 de mayo de 12 a las 13:05

¿Puedes usar array_multisort aquí? Por lo general, se usa para ordenar matrices multidimensionales. Pero aquí todavía necesita hacer un procesamiento inicial de sus matrices. php.net/manual/en/function.array-multisort.php -

3 Respuestas

$main_sort = array()    
foreach ($index as $key => $value) {
    if ($main [$value]) $main_sorted [$value] = $main [$value];
}

Simplemente recorra el $index matriz y asigne esos valores a una nueva matriz utilizando los valores de la $main formación.

contestado el 29 de mayo de 12 a las 09:05

si $index contiene valores que no son claves de $main, obtiene valores nulos en $main_sorted y posiblemente advertencias en su registro: walter tross

Se solucionó agregando una declaración if simple: Jeroen

Dado $index y $main,

uksort($main, function ($k, $k2) use ($index) {
  return array_search($k, $index) - array_search($k2, $index);
});

La matriz se ordenará de acuerdo con las claves especificadas en $index. No se especifica el comportamiento de las claves no coincidentes.

contestado el 22 de mayo de 12 a las 14:05

Esta solución funciona si no tiene ningún valor en $index que no sea una clave en $main (como es el caso en su ejemplo):

$sorted = array_merge(array_flip($index), $main);

Si los valores de $index son un superconjunto de las claves de $main, una posible solución es:

$sorted = array_intersect_assoc(array_merge(array_flip($index), $main), $main);

Tenga en cuenta que dejar que las funciones de PHP funcionen en matrices es mucho más rápido que hacerlo "explícitamente"

contestado el 22 de mayo de 12 a las 18:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.