我有一个这样的数组:
array(
[root_1] => array(
[level_1] => array(
[id_1] => array(
[foo] = bar
)
)
)
)
我知道名字(即根,级别和ID),但我不知道密钥的数字部分。
我需要一个函数,它可以返回数组中包含给定名称的任何部分。
干杯
答案 0 :(得分:3)
你去吧
function search_incomplete ($needle, $haystack)
{
foreach (new RecursiveIteratorIterator (new RecursiveArrayIterator ($haystack), RecursiveIteratorIterator::SELF_FIRST) as $key => $value)
{
if (strpos ($key, $needle) === 0)
{
return $value;
}
}
}
$array = array (
'root_1' => array (
'level_1' => array (
'foo' => 'bar',
),
),
);
var_dump (search_incomplete ('level', $array));
var_dump (search_incomplete ('root', $array));
var_dump (search_incomplete ('foo', $array));
答案 1 :(得分:0)
$level = 1;
if (isset($array['root_'.$level]['level_'.$level]['id_'.$level])) {
return $array['root_'.$level]['level_'.$level]['id_'.$level];
} else {
// something else
}
编辑:如果您只知道密钥的前缀:
$out = array();
foreach ($array as $key1 => $value1)
if (is_array($value1) && strpos($key1, 'root_') === 0)
foreach ($value1 as $key2 => $value2)
if (is_array($value2) && strpos($key2, 'level_') === 0)
foreach ($value2 as $key3 => $value3)
if (strpos($key3, 'id_') === 0)
$out[$key1][$key2][$key3] = $value3;
return $out;
答案 2 :(得分:0)
您可以使用array_search
执行此操作!
答案 3 :(得分:0)
这应该做你需要的。
function preg_grep_keys( $pattern, $input, $flags = 0 )
{
$keys = preg_grep( $pattern, array_keys( $input ), $flags );
$vals = array();
foreach ( $keys as $key )
{
$vals[$key] = $input[$key];
}
return $vals;
}
从... http://www.php.net/manual/en/function.preg-grep.php#95787