2016-07-24 15 views
0

以下は私の配列の見た目のダンプです。役人と呼ばれる内側の配列があり、それをループして特定の役員がいるかどうかを確認したい場合は、外側の配列のインデックスキーを取得したいと考えています。3次元配列のキーを取得

'edges' => 
    array (size=59) 
     0 => 
     array (size=3) 
      'source' => int 0 
      'target' => int 12 
      'officers' => 
      array (size=1) 
       0 => string 'PARKER, Thomas, Sir' (length=19) 
     1 => 
     array (size=3) 
      'source' => int 0 
      'target' => int 19 
      'officers' => 
      array (size=1) 
       0 => string 'STEVENS, Anne' (length=13) 

私はSTEVENS、アンのチェックのであれば、私はここでキー1

を取得したいが、私はそれが2D配列ではなく、3Dの配列で動作する別の質問で見つけたコードです。

function array_search_inner ($array, $attr, $val, $strict = FALSE) { 
    // Error is input array is not an array 
    if (!is_array($array)) return FALSE; 
    // Loop the array 
    foreach ($array as $key => $inner) { 
    // Error if inner item is not an array (you may want to remove this line) 
    if (!is_array($inner)) return FALSE; 
    // Skip entries where search key is not present 
    if (!isset($inner[$attr])) continue; 
    if ($strict) { 
     // Strict typing 
     if ($inner[$attr] === $val) return $key; 
    } else { 
     // Loose typing 
     if ($inner[$attr] == $val) return $key; 
    } 
    } 
    // We didn't find it 
    return NULL; 
} 
+0

私は迅速かつ短期的な解決策を提案できますが、厳密な比較があります。私たちが文字列について話すなら、比較は厳密でなければならないと思います – RomanPerekhrest

答えて

0

条件に合ういくつかのインデックスキーがあることができますので、発電機としての機能を実装するのが妥当である:

function getOfficerIndexKey($data, $officerName) { 
    foreach ($data['edges'] as $key => $value) { 
     in_array($officerName, $value['officers']) && (yield $key); 
    } 
} 

今、あなたはすべての見つかった値反復処理することができます

foreach (getOfficerIndexKey($data, 'STEVENS, Anne') as $indexKey) { 
    // Do something 
} 

最初に見つかったものを取得してください:

getOfficerIndexKey($data, 'STEVENS, Anne')->current(); 
関連する問題