2009-07-17 6 views
4

J'ai ce tableau PHP multidimensionnel (ci-dessous).Fusionner ou combiner un tableau comme celui-ci? sur PHP


Array 
(
    [0] => Array 
     (
      [2] => [email protected] 
     ) 

    [1] => Array 
     (
      [4] => [email protected] 
     ) 

    [2] => Array 
     (
      [3908] => [email protected] 
     ) 

    [3] => Array 
     (
      [2548] => [email protected] 
     ) 

    [4] => Array 
     (
      [3099] => [email protected] 
     ) 

    [5] => Array 
     (
      [5283] => [email protected] 
     ) 

) 

je me demandais comment pourrais-je fusionner? ou combiner? ou faites-le simplement comme ceci en utilisant PHP (ci-dessous).


Array 
(
    [2] => [email protected] 
    [4] => [email protected] 
    [3908] => [email protected] 
    [2548] => [email protected] 
    [3099] => [email protected] 
    [5283] => [email protected] 
) 

Aide

Répondre

0

Il suffit d'aller dans le tableau et magasin à l'autre.

$a = array(0 => array(1) , 1=> array(3)); 
$another=array(); 
foreach ($a as $k=>$v){  
    foreach ($v as $y=>$z){ 
     $another[$k]=$z; 
    }  
} 
print_r($another); 
+0

Ceci est inutilement lent, et est grand O de n^2. Vous pouvez simplement concaténer des tableaux, qui conserveront les clés et les valeurs. –

+0

Vous perdez les clés en fonction de array_push. Vous devrez le remplacer par $ another [$ y] = $ z à la place. – scronide

+0

merci ... n'a pas remarqué que les clés doivent être intactes – ghostdog74

-1

Que pensez-vous de cela?


foreach($old_arr as $old) 
{ 
    $key = key($old[0]); 
    $new[ $key ] = $old[0][$key]; 
} 

EDIT: Peu importe ne se rendait pas compte que la réponse précédente a été corrigée.

+0

Cela ne fonctionnera pas car il suppose que les valeurs du tableau enfant sont saisies sur 0, lorsqu'aucun de ceux dans l'exemple ne le sont. – scronide

3

Vous pouvez "promouvoir" les éléments de deuxième niveau à des éléments de premier niveau via call_user_func_array(). Et tandis que array_merge() réindexe le tableau, array_replace() ne mais conserve les clés d'origine qui en fait une seule ligne:

$a = call_user_func_array('array_replace', $a); 

test:

<?php 
$a = array (
    array (2 => '[email protected]'), 
    array (4 => '[email protected]'), 
    array (3908 => '[email protected]'), 
    array (2548 => '[email protected]'), 
    array (3099 => '[email protected]'), 
    array (5283 => '[email protected]'), 
); 
$a = call_user_func_array('array_replace', $a); 
var_dump($a); 
+0

Cela fait l'affaire, mais il est important de noter que array_replace() n'existe que depuis PHP 5.3.0 (20090630). – scronide