2015-05-07 72 views
-1

考慮三個關聯數組在PHP中:PHP:我如何將多個關聯數組組合到多維數組中?

$a1 = array(
"a" => "1", 
"b" => "2", 
"c" => "3" 
); 

$a2 = array(
"d" => "4", 
"e" => "5", 
"f" => "6" 
); 

$a3 = array(
"g" => "7", 
"h" => "8", 
"i" => "9" 
); 

你將如何有效地將這些成一個多維數組如下:

$result = array(
"1" => array("4","7"), 
"2" => array("5","8"), 
"3" => array("6","9") 
); 

提前感謝!

+2

您是否嘗試過某些方法來實現您的目標? – Rizier123

+0

規則是什麼? $ a1是否提供密鑰和$ a2/$ a3的值? –

+0

你是不是指'「1」=>數組(「1」,「4」,「7」),? – castis

回答

1

非常相似的一對夫婦的問題,我昨天晚上說:

$a1 = array(
"a" => "1", 
"b" => "2", 
"c" => "3" 
); 

$a2 = array(
"d" => "4", 
"e" => "5", 
"f" => "6" 
); 

$a3 = array(
"g" => "7", 
"h" => "8", 
"i" => "9" 
); 

$x = array_combine(
    $a1, 
    call_user_func_array('array_map', [null, $a2, $a3]) 
); 
var_dump($x); 
+0

好吧,我準備了完全相同的答案,只是解釋了代碼的作用,現在我正在等待OP展示一些努力和一些工作!但是現在OP得到他的糖果! – Rizier123

+0

完美!我希望我現在能把這個獎給你!由於舊的PHP安裝,我的服務器首先失敗。在我接受了答案後,我將其更正爲call_user_func_array('array_map',array(null,$ a2,$ a3)),現在它運行良好。它比我接受的要短。 – Stack

+0

@MarkBaker http://stackoverflow.com/q/30131528在OP的新問題中,您是否看到更多,更少或相同的努力量(與此相比)?此外,由於他以這種質量發佈了這個問題,他可能會認爲他將通過這一努力獲得他的代碼。正是這種行爲來自回答這樣的問題! (無需顯示) – Rizier123

1

相當直截了當:

foreach($a1 as $val) { 
    $result[$val] = array(array_shift($a2), array_shift($a3)); 
} 
+0

這個作品:少即是多。 – Stack

0

這是什麼意思?

<?php 

$a1 = array(
    "a" => "1", 
    "b" => "2", 
    "c" => "3" 
); 

$a2 = array(
    "d" => "4", 
    "e" => "5", 
    "f" => "6" 
); 

$a3 = array(
    "g" => "7", 
    "h" => "8", 
    "i" => "9" 
); 

$a1_ = array_values($a1); 
$a2_ = array_values($a2); 
$a3_ = array_values($a3); 

$newarray = array(); 
$max = count($a1_); 
for($i = 0; $i < $max; $i++) { 
    $newarray[$a1_[$i]] = array($a2_[$i], $a3_[$i]); 
} 

var_dump($newarray); 

其輸出

array(3) { 
    [1]=> 
    array(2) { 
    [0]=> 
    string(1) "4" 
    [1]=> 
    string(1) "7" 
    } 
    [2]=> 
    array(2) { 
    [0]=> 
    string(1) "5" 
    [1]=> 
    string(1) "8" 
    } 
    [3]=> 
    array(2) { 
    [0]=> 
    string(1) "6" 
    [1]=> 
    string(1) "9" 
    } 
} 
+0

工作,但我必須處理30-50數組 - 必須聲明$ a1_ = array_values($ a1); $ a2_ = array_values($ a2); $ a3_ = array_values($ a3);看起來像一個阻力。 – Stack

0

首先結合所有陣列的成單個多維數組。

$arrays = array(); 
array_push($arrays,$a1) //Do the same for the rest 

創建另一個數組並循環遍歷我們剛剛創建的數組。

$result = array(); 
foreach($arrays as $a) { 
    $result[$a[0]] = array_shift($a); 
} 

這會將第一個值從數組中拉出並使其成爲關鍵字。然後它使用array_shift彈出數組的第一個元素,使其不包含在賦值中。

這是沿着你在找什麼?

注意:這是可擴展的任何大小的數組和任意數量的數組。只需使用array_push將所需的任何數組添加到$數組中,它將遵循上面列出的模式。