2012-05-24 74 views
0

Array_merge和array_merge_recursive未按需要工作,创建更多索引而不是将数组推到一起并保留索引号。参阅下面的输入/期望的输出:合并数组中的数组,保留数字索引

Array (
    [0] => array(
     [0] => "string1", 
     [1] => "string2", 
     [2] => "string3" 
    ), 
    [1] => array(
     [0] => "string4", 
     [1] => "string5", 
     [2] => "string6" 
    ), 
    [2] => array(
     [0] => "string7", 
     [1] => "string8", 
     [2] => "string9" 
    ) 
) 

所需的输出:

Array (
    [0] => array("string1","string4","string7"), 
    [1] => array("string2","string5","string8"), 
    [2] => array("string3","string6","string9") 

) 

编辑:

也许不是最好的例子;我想获得相同的结果,但每个嵌套数组中的键数不相等。请参阅下面的一个更好的例子:

<?php 
$array = Array (
[0] => array(
    [0] => "string1", 
    [1] => "string2", 
    [2] => "string3" 
    ), 
[1] => array(
    [0] => "string4", 
    [1] => "string5", 
    [2] => "string6" 
    ), 
[2] => array(
    [0] => "string7", 
    [1] => "string8", 
    [2] => "string9" 
    ), 
[3] => array(
    [0] => "string10", 
    [1] => "string11", 
    [2] => "string12" 
    ) 
); 

$output=array(); 
    for($0=0;$j<count($array[0]);$j++){ 
     $output[$j] = array(); 
    } 

for($i=0;$i<count($array);$i++){ 
    for($0=0;$j<count($array[0]);$j++){ 
     $output[$j] = array_push($output[$j],$column_values[$i][$j]); 
    } 
} 


?> 

但是当我这样做,我得到键的正确数目我的$输出数组,但都包含一个布尔(假)。任何帮助?

这是所需的输出:

Array (
    [0] => array("string1","string4","string7","string10"), 
    [1] => array("string2","string5","string8","string11"), 
    [2] => array("string3","string6","string9","string12") 
) 
+3

我不认为合并是这里反正正确的方法。你想重新构造整个数组,所以迭代元素并创建一个新数组。 –

回答

1

这是为了使一个数组只为阵列的这种结构,所以你可能会改变代码depanding您的需求...

<pre> 
<?php 
    $array = array(array("string1","string2","string3"),array("string4","string5","string6"),array("string7","string8","string9")); 
    $output=array(); 
    for($i=0;$i<count($array[0]);$i++){ 
     for($j=0;$j<count($array[0]);$j++){ 
      $output[$i][$j] = $array[$j][$i]; 
     } 
    } 

    print_r($output); 
?> 
</pre> 
+0

这对于这个例子非常适用,其中在两个输入数组中都有相同数量的键,但是如果第一个数组中的键比第二个中的键多呢? – user1174265

0

得到它了。最后一个循环应该只是array_push($output[$j],$column_values[$i][$j]);而不是试图设置变量$output[$j] = array_push(Yadda,yadda)

0

这是你的“第二”的局面:

<?php 

    $array = array(array("string1","string2","string3"),array("string4","string5","string6"),array("string7","string8","string9"),array("string10","string11","string12")); 
    $output=array(); 

    for($i=0;$i<count($array[0]);$i++){ 
     for($j=0;$j<=count($array[0]);$j++){ 
      $output[$i][$j] = $array[$j][$i]; 
     } 
    } 
    print_r($output); 
?>