2016-10-25 12 views
0

私は多次元インデックス配列を持っています。各要素は、要素間でユニークなid列の連想配列です(その値は配列内で繰り返されません)。列値に応じた連想配列への多次元インデックス配列

[indexed] =>Array 
(
    [0] => Array 
     (
      [id] => john 
      [name] => John 
      [age] => 29 
     ), 

    [1] => Array 
     (
      [id] => peter 
      [name] => Peter 
      [age] => 30 
     ), 

    [2] => Array 
     (
      [id] => harry 
      [name] => Harry 
      [age] => 19 
     ) 
) 

私の目標は、id値によってインデックスさ多次元連想配列の中にこの配列を変換することです。

[indexed] =>Array 
(
    [john] => Array 
     (
      [id] => john 
      [name] => John 
      [age] => 29 
     ), 

    [peter] => Array 
     (
      [id] => peter 
      [name] => Peter 
      [age] => 30 
     ), 

    [harry] => Array 
     (
      [id] => harry 
      [name] => Harry 
      [age] => 19 
     ) 
) 

これまでのところ、配列要素をループして、最終的な配列を手動で作成するのが最善の試みです。

$associative = array(); 
foreach($indexed as $key=>$val) $associative[$val['id']] = $val; 

私はそれが最もエレガントな解決策ではないと思います。組み込みの(より効率的な)関数で同じ結果を得ることは可能ですか?ここで

+0

PHPでは、キーを配列の特定の値で上書きするinbuilt関数はありません。配列数が巨大でない場合、この解決策はOKです。さもなければ、処理が速いXMLまたはJSONを使用してください –

答えて

1

はそれを行うための別の方法($arrを仮定すると、あなたの元の配列である)である:

$associative = array_combine(array_map(function($item) { return $item['id']; }, $arr), $arr); 

しかし、私はforeachのを使用して、まだこれに比べ短く、より読みやすいと思います。

+0

あなたのコメントに同意しますが、とにかく努力してくれてありがとうございます:+1 – Giorgio

関連する問題