2012-07-03 13:55



I've been searching through SO and come across a couple solutions that all feel like hacks for getting around the default array_merge_recursive behavior on numeric keys. For instance, I've read that you can add an underscore to the beginning, changing your number to a string.

Anyway, here's my data set and intended outcome...

array ( "Name1", "Name2", "Name3" );
array ( "Data1", "Data2", "Data3" );
array ( "Price1", "Price2", "Price3" );

Intended outcome:

array ( 1 => array ( "Name1", "Data1", "Price1" ), 2 => array ( "Name2", "Data2", "Price2" ), 3 => array ( "Name3", "Data3", "Price3" );

I'm sure you're aware of how array_merge_recursive normally operates with numeric keys... Here's my current merged results.

array ( "Name1", "Name2", "Name3", "Data1", "Data2", "Data3", "Price1", "Price2", "Price3");

Is there a proper method for this? What are the pros and cons to individual methods, like adding an underscore to create a string key?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答


  • dongmacuo1193 dongmacuo1193 9年前

    A simple workaround would be a completely different approach, like:

    $merged = array_map(function () { return func_get_args(); }, $array1, $array2, $array3);
    点赞 评论 复制链接分享
  • douqiang6448 douqiang6448 9年前
    $merge_array = array();
    for($i = 0; $i < count($array1); $i++) {
        $row = array();
        $row[] = $array1[$i];
        $row[] = $array2[$i];
        $row[] = $array3[$i];
        $merged_array[] = $row;

    That should work.

    点赞 评论 复制链接分享