2011-08-22 94 views
8

我有一个数组,看起来像这样:如何防止array_merge重新编号数字键

Array ( 
    [0] => Array ([unit_id] => 1 [unit_name] => Clown Fish) 
    [1] => Array ([unit_id] => L [unit_name] => Liter) 
    [2] => Array ([unit_id] => 2 [unit_name] => Elephant ) 
    [3] => Array ([unit_id] => 3 [unit_name] => Water Bottle) 
    [4] => Array ([unit_id] => 4 [unit_name] => Office Seating) 
    [5] => Array ([unit_id] => 5 [unit_name] => Green Green Grass) 
) 

然后,我写了一个函数

function array_to_list($arr_data, $str_key, $str_value) { 
    $arr_list = array(); 
    if (is_array($arr_data)) { 
     foreach($arr_data as $arr_value) { 
      if (isset($arr_value[$str_key]) && isset($arr_value[$str_value])) { 
       $arr_list = array_merge($arr_list, array($arr_value[$str_key] => $arr_value[$str_value])); 
      } 
     } 
    } 
    return $arr_list; 
} 

到数组转换成这个样子

Array ( 
    [1] => Clown Fish) 
    [L] => Liter) 
    [2] => Elephant) 
    [3] => Water Bottle) 
    [4] => Office Seating) 
    [5] => Green Green Grass) 
) 

但是输出,而不是

Array ( 
    [0] => Clown Fish) 
    [L] => Liter) 
    [1] => Elephant) 
    [2] => Water Bottle) 
    [3] => Office Seating) 
    [4] => Green Green Grass) 
) 

我认为这与array_merge本身的性质有关,它根据php手册“输入数组中的值与数字键将使用从结果数组中的零开始的递增键重新编号。”

有没有办法让我可以产生有或没有array_merge的预期结果?

+3

http://www.programmingfacts.com/merging-arrays-with-reindex-and-without-reindexing/ – PlagueEditor

+0

感谢回答如此之快。看到解决方案非常简单,但我在前段时间使用Google搜索时找不到它,这让我很尴尬。谢谢。 – dqiu

回答

2

你为什么不只是尝试一个更简单的方法:

function array_to_list($arr_data, $str_key, $str_value) { 
    $arr_list = array(); 
    if (is_array($arr_data)) { 
     foreach($arr_data as $arr_value) { 
      if (isset($arr_value[$str_key]) && isset($arr_value[$str_value])) { 

       // This is the changed line: 
       $arr_list[ $arr_value[$str_key] ] = $arr_value[$str_value]; 

      } 
     } 
    } 
    return $arr_list; 
} 

这只是设置在输出值数组直接。没有理由每次都创建一个新的数组并进行合并。它也应该快一点。

+0

我不知道自己为什么你的解决方案没有提前到我的头上。谢谢。速度更快,我想我可以节省开销,而不是用旧的。 – dqiu

0

array_merge()和追加keyvalue$arr_list

function array_to_list($arr_data, $str_key, $str_value) { 
    $arr_list = array(); 
    if (is_array($arr_data)) { 
     foreach($arr_data as $arr_value) { 
      if (isset($arr_value[$str_key]) && isset($arr_value[$str_value])) { 
       $arr_list[$arr_value[$str_key]] = $arr_value[$str_value]; 
      } 
     } 
    } 
    return $arr_list; 
} 
+0

或@PlagueEditor表示:''$ arr_list = $ arr_list +(array($ arr_value [$ str_key] => $ arr_value [$ str_value]));' –

+0

我实际上都使用了:D。对我来说是一种运动。谢谢。 – dqiu

14

使用 '+' 操作符,而不是array_merge()

function array_to_list($arr_data, $str_key, $str_value) { 
$arr_list = array(); 
if (is_array($arr_data)) { 
    foreach($arr_data as $arr_value) { 
     if (isset($arr_value[$str_key]) && isset($arr_value[$str_value])) { 
      $arr_list = $arr_list + array($arr_value[$str_key] => $arr_value[$str_value]); 
     } 
    } 
} 
return $arr_list; 

}

+1

这正是我所需要的(为了一个更简单的目的)......用数字键向数组添加'0'键而不重新编号键。 – lhagemann

+0

+1,因为简单和准确 – Marecky