2011-08-22 4 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) 
) 

これは、phpマニュアルによると、 "数値キーを持つ入力配列の値は、結果配列のゼロから始まるインクリメントキーの番号が付け替えられます"というarray_merge自体の性質と関係があると仮定します。

私はarray_mergeの有無にかかわらず、意図した結果を得る方法がありますか?

+3

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

+0

おかげ早く答えるために。解決がとてもシンプルだと私は恥ずかしいですが、私はしばらく前にグーグルグーグルでそれを見つけることができません。ありがとうございました。 – dqiu

答えて

2

からkeyvalue追加:

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()をドロップすると、あなただけの非常にシンプルなアプローチを試みてはいけないのはなぜ新しい$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