2014-12-07 46 views
-1

簡單地說,我需要幫助,如何在不改變關鍵數組的情況下將多維數組合成一個數組?將多維數組簡化爲一個數組

從這些:

Array 
    (
     [0] => Array 
      (
       [554] => a 
      ) 

     [1] => Array 
      (
       [561] => b 
      ) 

     [2] => Array 
      (
       [574] => c 
      ) 

    ) 

到這些:

Array 
(
    [554] => a 
    [561] => b 
    [574] => c 
) 
+0

歡迎到SO。你能描述你的挑戰嗎?現在,你的問題還沒有一個好的格式。如果你想得到一些幫助,有一個好的格式是很重要的。如果有必要,搜索一些有許多優點的問題。你可以學習如何編寫更好的問題。 :) – jazzurro 2014-12-07 10:26:43

+0

對不起,我想我正確地問,如果這個問題沒有用,那麼我怎麼刪除它? – drup4l 2014-12-07 10:56:46

回答

-1

這應該爲你工作:

$array = array(
      array(554 => "a"), 
      array(561 => "b"), 
      array(574 => "c") 
     ); 


function getL2Keys($array) { 
    foreach($array as $sub) 
     $result[] = array_keys($sub); 

    return call_user_func_array('array_merge', array_values($result)); 
} 

$array = array_combine(getL2Keys($array), call_user_func_array('array_merge', array_values($array))); 
print_r($array); 

輸出:

Array 
(
    [554] => a 
    [561] => b 
    [574] => c 
) 
+0

它的工作原理,我認爲我必須使用array_reduce,謝謝。 – drup4l 2014-12-07 10:47:53

+0

@ drup4l您的歡迎!祝你有個美好的一天:D – Rizier123 2014-12-07 10:48:17

0

我喜歡用array_walk_recursive的問題是這樣的:

function flatten($array) 
{ 
    $temp=array(); 
    array_walk_recursive($array, function($item, $key) use (&$temp) { 
     $temp[$key]=$item; 
    }); 

    return $temp; 
} 

$a = array(
    array(
     564=>'a', 
    ), 
    array(
     561=>'b', 
     array(
      562=>'d', 
      array(
       563=>'e', 
      ), 
     ), 
    ), 
    array(
     574=>'c', 
    ), 
); 

$b = flatten($a); 
print_r($b); 

這是我的輸出:

Array 
(
    [564] => a 
    [561] => b 
    [562] => d 
    [563] => e 
    [574] => c 
) 
+0

這個也適用於我的情況,謝謝。 – drup4l 2014-12-07 11:02:35

0

我就有權發佈此,因爲所有其他現有的答案是如此過於複雜得不得了:

$result = array_reduce($array, function ($result, $array) { return $result + $array; }, array()); 

這就是所有需要的。

+0

也許你先讀過這個問題:D在你的答案中,鑰匙會丟失! – Rizier123 2014-12-07 11:02:39

+0

Dammnit,用數字鍵忘了'array_merge'的愚蠢...... – deceze 2014-12-07 11:04:54

+0

那麼,在這裏,你會找到一個更好的解決方案。你只需要在數組上迭代'+'運算符。 – deceze 2014-12-07 11:07:42

0

我希望我能幫助你,首先,不要誤會,你需要進一步調查,在尋求解決方案之前,我強烈建議你去www.php.net,http://php.net/manual/en/book.array.php和搜索陣列文檔,足以說你正在尋找通過數組循環方式,其實你正在尋找「的foreach」語句,這裏我做了一個簡單的解決方案,它可以轉化爲功能後:

<?php 

$original = array 
    (
     0 => array(554 => 'a'), 
     1 => array(561 => 'b'), 
     2 => array(574 => 'c'), 
     ); 


/*$result = Array 
(
    [554] => a 
    [561] => b 
    [574] => c 
);*/ 

$result = array(); 


foreach ($original as $sub_array) { 

    //this help us read first level array 
    foreach ($sub_array as $subArrayKey=>$subArray) { 
     // this help us read second level array 
     $result[$subArrayKey] = $subArray; 

    } 
} 

echo '<pre>'; 
print_r($result); 
echo '</pre>'; 

?>