2017-02-05 19 views
0

私はいくつかの配列を持っていますが、以下はそれらの配列の2つの例です。私はモードのキーの値を取得したいと思います。これらの配列がどのインデックスであるかはわかりません。私は、次の試み:多次元配列で特定のキーの値を取得する方法PHP

$text1 = array(
      'type'=>'balance', 
      'lang'=> array(
        'text'=>array(
         'en'=>array('mode'=>'ussd', 'tet'=>'Your balance is'), 
         'ru'=>array('mode'=>'ussd', 'tet'=>'vash balance'), 
       ), 
       ), 
      ); 

$text2 = array(
      'type'=>'balance', 
      'lang'=> array(
        'text'=>array(
         'en'=>array(
          'success'=>array(
           'mode'=>'ussd', 
           'tet'=>'Your balance is'), 
          'error'=>array(
           'mode'=>'ussd', 
           'tet'=>'Your balance is err') 
          ), 
         'ru'=>array(
          'success'=>array(
           'mode'=>'ussd', 
           'tet'=>'vash balans'), 
          'error'=>array(
           'mode'=>'ussd', 
           'tet'=>'vash balans is err' 
           ) 
          ), 
       ), 
       ), 
      );   

function GetKey($key, $search) 
{ 
    foreach ($search as $array) 
    { 
     if (array_key_exists($key, $array)) 
     { 
      return $array[$key]; 
     } 
    } 

    return false; 
} 

$tmp = GetKey('mode' , $text1); 
echo $tmp; 

この戻り値: 警告:ライン上の\ XAMPP \ htdocsに\テスト\のindex.phpを27

:array_key_exists()は、パラメータ2がCで指定された配列、文字列であることを期待しますphp.netによると、array_key_exists()は最初の次元のキーだけを検索します。 多次元配列のネストされたキーは見つかりません

答えて

0

これは、最初のキーを見つけるまで再帰的に呼び出して、値を返します。潜在的にすべての値を収集するために展開することも、それぞれのインデックスの配列を返すこともできます。

function GetKey($key, $array) { 
    if (is_array($array)) { 
     foreach ($array as $k => $v) { 
      if ($k == $key) { 
       return $v; 
      } elseif (is_array($v)) { 
       return GetKey($key, $v); 
      } 
     } 
    } else { 
     return false; 
    } 
} 

編集:すべての値を見つけます。関数は今戻ってこない、結果をすべての再帰的な範囲の配列に、globalを使用して押し続けます。

function GetKey($key, $array) { 
    global $results; 

    if (is_array($array)) { 
     foreach ($array as $k => $v) { 
      if ($k == $key) { 
       $results[] = $v; 
      } elseif (is_array($v)) { 
       GetKey($key, $v); 
      } 
     } 
    } 
} 

$results = array(); 
GetKey('mode', $text1); 
// $results is now: ['ussd', 'ussd'] 

$results = array(); 
GetKey('mode', $text2); 
// $results is now: ['ussd', 'ussd', 'ussd', 'ussd'] 
+0

ありがとうございます!できます。 –

+0

もちろん、値が違う場合は、すべての値を収集すると良いでしょう。 –

+0

@seb_dom編集を見てください –

関連する問題