下面是我的数组的样子转储。有内部数组称为官员,我想循环通过它,检查是否有特定名称的官员,如果是这样,我想得到外部数组的索引键。
'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;
}
答案 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();