2016-10-16 20 views
1

における多次元配列でキーの配列のための変数を使用します。

これは配列です:

array(2) { 
    ["data"]=> 
    array(4) { 
     ["children"]=> 
     array(25) { 
      [0]=> 
      ["first_key"]=> 
      array(50) { 
       ["second_key"]=> 
       string(9) "My Title" 
      } 
     } 
    } 
} 

は、次にPHPで、私は$ json_dataとしてこれを設定し、期待通りのforループ

foreach ($json_data['data']['children'] as $key => $value) { 
    echo $title = $value['first_key']['second_key']; 
} 

出力「マイタイトル」とからデータを引っ張って開始します。

私の質問(もし私の質問がうまくいけば助言してください)は、私は変数としてキーを設定できますか?私はそれを文字列として設定することができないことを知っているが、私は次のように$値にキーの配列を渡すことができます。

$key_array = array('first_key' => array('second_key')); 

foreach ($json_data['data']['children'] as $key => $value) { 
    echo $title = $value[$key_array]; 
} 

またはそのような何か?私も同じように、素晴らしいことだ$ key_arrayセットを持っている関数に$配列を渡すことができたに機能作る

エコーget_array_value($配列、$ array_keysを)。

しかし、正しい方向に押してください。

+0

あなたは、配列からデータを取得する必要がありますか?あなたは何をしようとしているのですか? – user2182349

+0

はい、したがって質問;)。私は配列が作成される前に正しいキー/値のペアに "パス"を設定したいと思います。 –

+0

常に同じパスですか? – user2182349

答えて

2

まず、ここを参照してください:

$key_array = array('first_key' => array('second_key')); 

代わりのキーの多次元配列を宣言し、その値はあなたが元の配列$json_dataから取得したいすべてのキーを備えたシンプルな配列を宣言し、このように:

$array_keys = array('second_key', 'another_key'); 

そして第二に、あなたの質問から:

作ります私も同じように、素晴らしいことだ$key_arrayセットを持つ関数へ$arrayを渡すことができたと機能:

echo get_array_value($array, $array_keys); 

はい、これは確かに可能です。 溶液は次のようになります

  • 機能get_array_value()を書くと元の配列$json_data、この機能の鍵$array_keysの配列を渡します。
  • foreachループ内にループget_array_value()を作成して、$array_keys配列をループします。ループの各反復で、別の再帰的なユーティリティ関数get_array_value_utility()を呼び出します。
  • get_array_value_utility()関数は、配列を繰り返しループし、配列から必要な値を取得します。

ここコードです:

ここ
function get_array_value_utility($array, $key){ 
    foreach($array as $k => $v){ 
     if($key == $k){ 
      return $v; 
     }else if(is_array($v)){ 
      $v = get_array_value_utility($v, $key); 
      if ($v != null) return $v; 
     } 
    } 
} 

function get_array_value($array, $array_keys){ 
    $values = array(); 
    foreach($array_keys as $key){ 
     $values[] = get_array_value_utility($array, $key); 
    } 
    return $values; 
} 

$array_keys = array('second_key', 'another_key'); 
$values = get_array_value($json_data, $array_keys); 

// display $values array 
var_dump($values); 

live demoだ(@から取らEvanroseのcomment

+0

このソリューションは任意のネストレベルに対して柔軟です – EaBangalore

+0

@EaBangaloreはい、このソリューションは任意のレベルのネストに柔軟性があります。 –

+0

良い解決に感謝 – EaBangalore

関連する問題