2009-07-17 5 views
4

Ich habe diese multidimensionale PHP-Array (unter).Merge oder kombinieren ein Array wie folgt? auf 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] 
     ) 

) 

Ich frage mich, wie kann ich fusionieren? oder kombinieren? oder einfach so mit PHP (unter).


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

Hilfe

Antwort

0

einfach durch das Feld gehen und zum anderen speichern.

$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

Dies ist unnötig langsam, und ist groß O von n^2. Sie können einfach Arrays verketten, die Schlüssel und Werte beibehalten. –

+0

Sie verlieren die Schlüssel, die auf array_push basieren. Sie müssten das stattdessen durch $ another [$ y] = $ z ersetzen. – scronide

+0

danke ... habe nicht bemerkt, dass die Schlüssel intakt sein müssen – ghostdog74

-1

Wie wäre es damit?


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

EDIT: Es machte nichts, merkte nicht, vorherige Antwort wurde korrigiert.

+0

Das wird nicht funktionieren, weil es annimmt, dass die untergeordneten Array-Werte auf 0 festgelegt werden, wenn keiner von denen in dem Beispiel ist. – scronide

3

Sie können die Elemente der zweiten Ebene über call_user_func_array() zu Elementen der ersten Ebene "befördern". Und während array_merge() re-Indizes der Array, tut array_replace() nicht aber behält die ursprünglichen Schlüssel, die diesen einen Einzeiler macht:

$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

Dies macht den Trick, aber es ist wichtig zu beachten, dass array_replace() nur seit PHP 5.3.0 (20090630) existiert. – scronide