2012-05-03 17 views
8

tengo una matriz que puede parecerse acambiar todos los elementos de la matriz hasta un nivel en una matriz multidimensional

$arr = array(
    array(
     'test1' => 'testing1' 
    ), 
    array(
     'test2' => array(
     1 =>'testing2 
    ) 
); 

y quiero convertirlo en

$newArr = array(
    'test1' => 'testing1', 
    'test2' => array(
     1 => 'testing2' 
    ) 
); 

por lo que he estado tratando de cambiar todos los elementos de la matriz suben un nivel.

eidt:

este es mi método que combina 2 gama juntos:

public function arrayMerge($arr1, $arr2) 
      { 
       foreach($arr2 as $key => $value) { 

        $condition = (array_key_exists($key, $arr1) && is_array($value)); 
        $arr1[$key] = ($condition ? $this->arrayMerge($arr1[$key], $arr2[$key]) : $value); 
       } 

       return $arr1; 
      } 
+0

Necesitaba hacer lo mismo, aunque descubrí que simplemente haciendo '$ newArray = $ oldArray [0]' era todo lo que se necesitaba para resolver el problema. ¿No funcionaría esto en tu caso? – vertigoelectric

Respuesta

10

Trate

$arr = array(
     array('test1' => 'testing1'), 
     array('test2' => array(1 =>'testing2')) 
); 

$new = array(); 
foreach($arr as $value) { 
    $new += $value; 
} 
var_dump($new); 

Salida

array 
    'test1' => string 'testing1' (length=8) 
    'test2' => 
    array 
     1 => string 'testing2' (length=8) 
+0

gracias, esto funcionó perfecto en combinación con mi método arrayMerge()! – Eli

+1

¿No hay ** función incorporada ** para hacer esto ** SIN ** usar un 'foreach'? Sería más fácil ** convertir una matriz multidimensional en una sola dimensión en PHP ** – Neocortex

+0

Estuve buscando una función incorporada durante mucho tiempo porque no podemos usar bucles foreach anidados de 3 a 4 para extraer datos de la matriz. Si alguien pudiera aparecer sin utilizar foreach esp: con una función incorporada, entonces lo llamaría corona de PHP. – Neocortex

16

es algo trivial, de muchas maneras son posibles.

Por ejemplo, usando el array union operator (+)­Docs creación de la unión de todas las matrices dentro de la matriz:

$newArr = array(); 
foreach ($arr as $subarray) 
    $newArr += $subarray; 

o utilizando array_merge­Docs con todos los subconjuntos a la vez a través de call_user_func_array­Docs:

$newArray = call_user_func_array('array_merge', $arr); 
+0

'call_user_func_array' funcionaba como un encanto! Gracias hombre. – racl101

+0

Prefiero este método porque evito el ciclo "foreach". Gracias. –

+2

A partir de PHP 5.6 puede usar el operador splat '' '$ arr = array_merge (... $ arr)' ''. Es significativamente más rápido que call_user_func_array –

Cuestiones relacionadas