2017-12-27 6 views
0

に基づいて多次元配列から子供を得る:私はこのような構造化されたオブジェクトを持ってプロジェクトに取り組んでい値PHP

$main_array= [ 
    [ 
    "key"=> "home", 
    "value":=> "Go Home!" 
    ], 

    [ 
    "key"=> "business", 
    "value"=> "Go to Work!" 
    ], 

    [ 
    "key"=> "other", 
    "value"=> "Go where you want!" 
    ] 
] 

私は、オブジェクトを取得する方法があるかどうかを知りたいのですが「キー」パラメータに基づいて私は何をしたいか は「抽出物」「ビジネス」と「その他」の

$home_array=["key"=> "home","value":=> "Go Home!"] 

などのようなネストされた配列です。 javascriptで、私は何かを取得するjqueryまたはアンダースコアを使用することができます、これを達成するためのPHPメソッド、または多次元配列/オブジェクトの "どこ"句をシミュレートするものですか?あなたが簡単にあなたがarray_column() ...

$main_array= [ 
     [ 
       "key"=> "home", 
       "value"=> "Go Home!" 
     ], 

     [ 
       "key"=> "business", 
       "value"=> "Go to Work!" 
     ], 

     [ 
       "key"=> "other", 
       "value"=> "Go where you want!" 
     ] 
]; 

$out = array_column($main_array, null, "key"); 

print_r($out['business']); 

出力を使用して、メインインデックスであることを「キー」列を持っている必要があり、配列を変換することができ、事前

+2

なぜキーが実際にキーであるような配列を作成しないのですか? –

+0

あなたのアドバイスは、今使っている方法ではなく、使用する意味の配列を使うことです。 – GrumpyCrouton

答えて

0

であなたthak

...

特定のキーに一致する単一の項目を取得する
Array 
(
    [key] => business 
    [value] => Go to Work! 
) 
+0

ウェブの周りを見て、私は似たような解決策を見つけましたが、私の場合はうまくいかないようです。元の配列は、EWSの連絡先クラスから保護された配列です。 – Biro

+0

元の投稿には、 ':=>'という要素が1つあり、間違っています。 –

+0

はい@nigel、私はそれを知っています。私はプレーンテキストでそれを書いた;) – Biro

0

いくつかの可能性:

  1. 反復メインアレイと、あなたが適切なキーを持っている子を取得するときに停止:

    $object = (function($key) use($main_array) { 
        foreach ($main_array as $object) { 
         if ($object['key'] == $key) return $object; 
        } 
    })('business'); 
    

    (この例では、匿名関数を使用しますが、あなただけの単純なforeachループを使用したときに破ることができます。メインアレイ

  2. 再インデックスに)キーを見つけて、キーで子を検索:インデックスが物乞いするよう

    $indexed = array_column($main_array, null, 'key'); 
    
    $object = $indexed['business']; 
    
  3. は、キーを使用してアレイを構築〜で。文字列キーを使用しても、配列要素が複数の値を含むことができる他の配列であることが排除されるわけではありません。

    $main_array= [ 
        'home' => ["value"=> "Go Home!"], 
        'business' => ["value"=> "Go to Work!"], 
        'other' => ["value"=> "Go where you want!"] 
    ]; 
    

方法2及び3は、それらのキーが一意であることが必要です。方法1はありませんが、最初に見つかったインスタンスが返されます。

キーのインスタンスが複数ある場合は、おそらくarray_filterが必要です。これはあなたが参照した "where句"のように機能します。

$key = 'home'; 
$filtered = array_filter($main_array, function($item) use ($key) { 
    return $item['key'] == $key; 
}); 

これは、1つではなく複数の項目を返します。

関連する問題