我有一个动态的多维数组,在所有维中都有唯一的键。(数组键可以是任何东西,下面的数组仅是一个示例,表明所有键都是唯一的。)
$data = array(
'0' => array(
'0-0' => array(
'0-0-0' => array(
'0-0-0-0' => 'some value',
'0-0-0-1' => 'some value',
),
'0-0-1' => array(
'0-0-1-0' => 'some value',
'0-0-1-1' => 'some value',
'0-0-1-2' => 'some value',
),
'0-0-2' => array(
'0-0-2-0' => 'some value',
'0-0-2-1' => 'some value',
),
'0-0-3' => array(
'0-0-3-0' => 'some value',
),
),
'0-1' => array(
'0-1-0' => array(
'0-1-0-0' => 'some value',
'0-1-0-1' => 'some value',
),
'0-1-1' => array(
'0-1-1-0' => 'some value',
'0-1-1-1' => 'some value',
),
'0-1-2' => array(
'0-1-2-0' => 'some value',
'0-1-2-1' => 'some value',
),
),
),
'1' => 'some value',
'2' => array(
'2-0' => 'some value',
'2-1' => array(
'2-1-0' => 'some value',
),
),
);
子阵列的深度和计数是动态的。所有键都是唯一的,但是上面的示例没有模式。
我需要找到给定键在此数组中的确切位置(所有父级都有)。例如;
get_key_position('0-1-2-1', $data);
应该退货array('0', '0-1', '0-1-2', '0-1-2-1')
get_key_position('2-1-0', $data);
应该退货array('2', '2-1', '2-1-0')
get_key_position('1', $data);
应该退货array('1')
我并没有努力去研究在您的问题下评论所引用的不同链接,所以也许我是在重新发明轮子:)
无论如何,这似乎在任何情况下都有效:
function look4key($key, $data, $path = []) {
if (is_array($data)) {
foreach ($data AS $localKey => $value) {
$localKey = (string)$localKey;
$localPath = array_merge($path, [$localKey]);
if ($localKey == $key) {
return $localPath;
}
if ($nestedPath = look4key($key, $value, $localPath)) {
return $nestedPath;
}
}
}
# returns NULL if $key not found
}
希望这是相当不言自明,但这一缺陷:(string)$localKey
需要像钥匙'0'
,'1'
等,因为这种自动施放(看的PHP手册):
包含有效整数的字符串将强制转换为整数类型。例如,键“ 8”实际上将存储在8以下。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句