【问题标题】:How to merge arrays without overwriting its index in php?如何在不覆盖php索引的情况下合并数组?
【发布时间】:2012-12-14 06:34:29
【问题描述】:

我有这个数组

Array
(
[0] => Array
    (
        [0] => Name
        [1] => Email
        [2] => Address
    )

[1] => Array
    (
        [0] => vanson
        [1] => dhmax@pan.com
        [2] => gurgaon
    )

[2] => Array
    (
        [0] => john
        [1] => 
        [2] => 
    )

[3] => Array
    (
        [0] => sdf
        [1] => sdfsdf
        [2] => sdfsd
    )

)    

我想要这个

Array
(       [0] => Name
        [1] => Email
        [2] => Address
        [0] => vanson
        [1] => dhmax@pan.com
        [2] => gurgaon
        [0] => john
        [1] => 
        [2] => 
        [0] => sdf
        [1] => sdfsdf
        [2] => sdfsd
  )    

不覆盖其索引

或者我想创建动态数组并将相同的索引值放入单个数组中。像这样

$arr_1 = array(
                    [0] => Name
                    [1] => vanson
                    [2] => john
                    [3] => sdf
                    )
  $arr_2 = array(
                    [0] => Email
                    [1] => dhmax@pan.com
                    [2] => 
                    [3] => sdfsdf
                    )
   $arr_3 = array(
                    [0] => Address
                    [1] => gurgaon
                    [2] => 
                    [3] => sdfsd
                    )    

根据第一个索引数组的计数创建数组。(例如,如果第 0 个索引有 4 个数组,则应创建 4 个数组。)

【问题讨论】:

  • 同一索引不能有多个值。如果这样做,您将如何单独检索它们?阅读数组及其工作原理。
  • 正如我在上一个代码中所写的那样。我必须将相同的索引数组值合并到一个数组中,将其他索引数组值合并到另一个数组中。所以我想如果我将所有数组索引->值合并为一个,然后将相同的索引值抓取到数组中。

标签: php arrays multidimensional-array merge


【解决方案1】:

PHP 有一个名为array_chunk() 的内置函数,你可以这样使用它-

$array = Array(Array(1=>'Name',2=>'Email'),Array(1=>'suresh',2=>'email@gmail.com'));        
echo "<pre>";print_r(array_chunk($array,1,true));
Output-
Array ( [0] => Array ( [0] => Array ( [1] => Name [2] => Email ) ) [1] => Array ( [1] => Array ( [1] => suresh [2] => email@gmail.com ) ) ) 

【讨论】:

  • 这看起来不像 OP 想要对我做的。他已经有一个行数组,他想获得列。
  • @udgeetpatel : 你问两个输出中的任何一个,使用 array_chunk() 你可以实现第二个输出。
【解决方案2】:

PHP arrays 不能有多个具有相同索引的值,因此您的第一个建议是不可能的。

但是,第二个选项可以使用array_map() 实现,方法是将null 值作为回调参数传递。这是一个方便的辅助函数(基于this excellent answer by Tadeck 到另一个问题):

function array_transpose( $array ) {
    $array = array_merge( array( null ), array_values( $array ) );
    return call_user_func_array( 'array_map', $array );
}

$columns = array_transpose( $rows );

(demo on codepad.org)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多