2011-08-22 14 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