php }array - ¿Cómo puedo reorganizar una matriz definiendo el orden de las teclas?





multidimensional sort (2)


Esto debería funcionar para usted:

Simplemente use array_replace() para cada subArray para reorganizar sus elementos. Use $header como primer argumento y array_flip() , de modo que los valores sean las claves, que definen el orden de las claves.

Y cada clave, que luego se encuentra en la matriz ( $header ), se rellenará con el valor de la misma (Cada subarrendamiento, $v ).

Como ejemplo:

Header / Key order:
       Array ( [name] =>   [version] =>   [IP] =>   ) 
                                                
                         └──┐                  ┌─┘
                         ┌──┼───────────┘       
                           └───────────────────┼──┐
                                   ┌───────────┘  
                         |                        |
    Array ( [version] => 1 [IP] => 1111 [name] => bbb ) 
(Each) Array:

---------------------
Result:
       Array ( [name] => bbb [version] => 1 [IP] => 1111 ) 

Código:

<?php

    $header = array("name", "version", "IP");

    $array = array_map(function($v)use($header){
        return array_replace(array_flip($header), $v);
    }, $array);

?>

Tengo una matriz multidimensional, donde quiero definir el orden de las claves de cada subarray con una matriz. Déjame hacer un ejemplo.

Matriz de entrada:

$array = array(
           array( "version" => 1, "IP" => 1111, "name" => "bbb"),
           array( "version" => 3, "IP" => 1112, "name" => "aaa"),
           array( "version" => 2, "IP" => 1113, "name" => "ccc")
         );

Quiero hacer algo como esto:

$a_array = sort_headers($array, array("name", "version", "IP"));

Y mi salida esperada sería (mire cómo el orden de las teclas cambió según la matriz pasada desde arriba):

$a_array = array(
               array("name" => "bbb", "version" => 1, "IP" => 1111),
               array("name" => "aaa", "version" => 3, "IP" => 1112),
               array("name" => "ccc", "version" => 2, "IP" => 1113)
             );

¡Sería genial si la respuesta fuera en menos código o mejor respuesta optimizada!




Si estas usando

a = []; 

Entonces está asignando una nueva referencia de matriz a, si la referencia en a ya está asignada a cualquier otra variable, entonces no vaciará esa matriz también y, por lo tanto, el recolector de basura no recopilará esa memoria.

Por ej.

var a=[1,2,3];
var b=a;
a=[];
console.log(b);// It will print [1,2,3];

o

a.length = 0;

Cuando especificamos a.length , solo estamos restableciendo los límites de la matriz y la memoria para los elementos de la matriz de descanso se conectará mediante el recolector de basura.

En lugar de estas dos soluciones son mejores.

a.splice(0,a.length)

y

while(a.length > 0) {
    a.pop();
}

Según la respuesta anterior de kenshou.html, el segundo método es más rápido.







php arrays sorting multidimensional-array