2017-01-07 2 views
1

は、私は、配列のキーとして特定の属性、idを使用したいのは、私は次の配列通常の配列をアトリビュートをキーとして連想配列に変換するベストプラクティス?

[ 
     { 
      "id": "16", 
      "name": "dog", 
     }, 
     { 
      "id": "17", 
      "name": "cat", 
     }, 
     { 
      "id": "18", 
      "name": "mouse", 
     } 
] 

があるとしましょう。これを行うには良い方法があります:その後、私は私の質問があり、この(望ましい結果)

{ 
    "16": { 
     "id": "16", 
     "name": "dog" 
    }, 
    "17": { 
     "id": "17", 
     "name": "cat" 
    }, 
    "18": { 
     "id": "18", 
     "name": "mouse" 
    } 
} 

を持っているでしょう

$someArray = [ ["id" => "16", "name" => "dog"], ["id" => "17", "name" => "cat"], ["id" => "18", "name" => "mouse"] ]; $newArray = []; foreach ($someArray as $currItem) { $newArray[$currItem["id"]] = $currItem; } 

:私はこれを行うことができますか?私は本当に少しだけ私の配列を再定義するためにすべての項目をループする必要がありますか?

+0

必要に応じて 'array_column()'を使用できます。 – Rizier123

+0

@ Rizier123名前のような残りの情報をどのように保持するのですか?array_column($ someArray、 "id");を実行すると '[" 16 "。" 17 "、" 18 " ' – Keatinge

+0

' array_column($ someArray、NULL、 "id") ' – Rizier123

答えて

1

私はRizier123さんのコメントからの情報を用いて溶液とこのスレッドを発見したように見える:PHP Change Array Keys

は、私の知る限りarray_columnを言うことができるように私だけIDの配列を与えるために起こっているので、私はそれを使用する必要がありますarray_combineおよびarray_valuesである。私はどこ元の配列はよく分からない

...あなたは良い答え

$someArray = [ 
    ["id" => "16", "name" => "a"], 
    ["id" => "17", "name" => "b"], 
    ["id" => "18", "name" => "c"] 
]; 


$newArray = array_combine(array_column($someArray, "id"), $someArray); 
1

を持っている場合、あなたは答えに私を打つが、私はとにかくほとんど寄与しないかもしれません投稿することを恐れないでください来ているが、あなたはJSONをデコードしている場合、その後、あなたが連想配列に変換するオブジェクトを強制するために、第2のparamを提供することができます

$contents = trim(file_get_contents("/home/jaith/foo/foo.json")); 
$arr = json_decode($contents, TRUE); // note the second parameter 
$v = array_combine(array_column($arr, "id"), $arr); 
var_dump($v); 

EDIT: あなたは出力配列はオブジェクトを持つ許容できる場合、これはまたかもしれません仕事:

$contents = trim(file_get_contents("/home/jaith/foo/foo.json")); 
$arr = json_decode($contents); 
$v = array_combine(
     array_column(
       array_map(
         function($item) { return (array)$item; }, 
         $arr 
       ), 
       "id" 
     ), 
     $arr 
); 
var_dump($v); 

非常に大きなアレイでは、パフォーマンスが問題になることがありますが、注意してください。これは、配列のmungingの多くをやっている。

+0

ありがとう、私は誰かがこれが役立つと確信しています。しかし、私はそれを読みやすくするためにjsonとして表示しています。実際にはMySQLデータベースから来ています – Keatinge

+0

MySQLデータベースのアクセス方法によっては、dbレコードをオブジェクトではなく配列として返すことができます。または、単に$ arr =(配列)のようにキャストしてもかまいません。$ db_object –

+0

PDO、I PDO :: FETCH_ASSOCについて知っていますが、IDをキーとして取得できるかどうかわかりません。私は '$ results = $ query-> fetchAll(PDO :: FETCH_ASSOC);'を使用します。 – Keatinge

関連する問題