2015-05-07 73 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将所需的任何数组添加到$数组中,它将遵循上面列出的模式。