【发布时间】:2015-04-06 01:17:27
【问题描述】:
假设我有两个数组,一个是我需要的键,另一个是我要测试的数组。
在我需要的键数组中,每个键可能有一个值,该值本身就是我需要的键数组,依此类推。
目前的功能如下:
static function keys_exist_in_array(Array $required_keys, Array $values_array, &$error)
{
foreach($required_keys as $key)
{
// Check required key is set in the values array
//
if (! isset($values_array[$key]))
{
// Required key is not set in the values array, set error and return
//
$error = new Error();
return false;
}
// Check the value is an array and perform function on its elements
//
if (is_array($values_array[$key]))
{
Static::keys_exist_in_array($required_keys[$key], $values_array[$key], $error);
}
return true;
}
}
我的问题是我要提交给$required_keys CAN 的数组如下所示:
$required_keys = array(
‘key1’,
‘key2’,
‘key3’,
‘key4’ = array(
‘key1’,
‘key2’,
‘key3’ = array(
‘key1’
)
)
);
显然这里的问题是foreach 只能找到每个键,例如'key4',而不是没有自己值的值,例如‘key1’,‘key2’,‘key3’。
但如果我使用标准 for 循环进行循环,我只会得到值 key1、key2、key3。
有什么更好的方法?
谢谢
【问题讨论】:
-
循环时检查值是否为数组,如果是则在循环内再次调用函数并传递值(数组)。
-
检查元素的类型,如果是数组,则在该元素上递归!
-
如上所述,问题在于循环。 Foreach 只提供键,for 只提供值。我需要在一个循环中...第 18-21 行是递归函数
-
为什么两者都需要?
key1、key2等都是值。你的数组很奇怪:为什么它是索引数组和关联数组的混合体?