获取三维数组的关键

时间:2016-07-24 17:21:46

标签: php arrays

下面是我的数组的样子转储。有内部数组称为官员,我想循环通过它,检查是否有特定名称的官员,如果是这样,我想得到外部数组的索引键。

'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,Anne我想得到钥匙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;
}

1 个答案:

答案 0 :(得分: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();