前几天我问了一个与此有关的问题,我得到了一个答案,但它没有做我想要的。这是我遍历多维关联数组的方法,检查一个键是否在数组中(从我之前的问题的答案):
private function checkKeyIsInArray($dataItemName, $array)
{
foreach ($array as $key => $value)
{
// convert $key to string to prevent key type convertion
echo '<pre>The key: '.(string) $key.'</pre>';
if ((string)$key == $dataItemName)
return true;
if (is_array($value))
return $this->checkKeyIsInArray($dataItemName, $value);
}
return false;
}
这是我的阵列结构:
Array (
[0] => Array ( [reset_time] => 2013-12-11 22:24:25 )
[1] => Array ( [email] => someone@example.com )
)
该方法遍历第一个数组分支,但不遍历第二个数组分支。有人可以解释为什么会出现这种情况吗?我似乎错过了一些东西。
答案 0 :(得分:4)
问题在于无论递归调用是否成功,都会返回递归调用返回的内容。只有在递归期间找到密钥时才应该返回,否则你应该继续循环。
private function checkKeyIsInArray($dataItemName, $array)
{
foreach ($array as $key => $value)
{
// convert $key to string to prevent key type convertion
echo '<pre>The key: '.(string) $key.'</pre>';
if ((string)$key == $dataItemName)
return true;
if (is_array($value) && $this->checkKeyIsInArray($dataItemName, $value))
return true;
}
return false;
}
BTW,为什么这是一个非静态函数?它似乎不需要任何实例属性。