Php 在嵌套关联数组中查找键
前几天我问了一个与此相关的问题,我得到了一个答案,但它没有达到我想要的效果。下面是我用来遍历多维关联数组的方法,根据我对上一个问题的回答,检查数组中是否有键:Php 在嵌套关联数组中查找键,php,multidimensional-array,nested,associative,Php,Multidimensional Array,Nested,Associative,前几天我问了一个与此相关的问题,我得到了一个答案,但它没有达到我想要的效果。下面是我用来遍历多维关联数组的方法,根据我对上一个问题的回答,检查数组中是否有键: private function checkKeyIsInArray($dataItemName, $array) { foreach ($array as $key => $value) { // convert $key to string to prevent key type converti
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;
}
该方法遍历第一个数组分支,但不遍历第二个。有人能解释一下为什么会这样吗?似乎我遗漏了什么。问题是,无论递归调用返回什么,不管它成功还是失败,都会返回。只有在递归过程中找到密钥时才应该返回,否则应该继续循环
顺便问一下,为什么这是一个非静态函数?它似乎不需要任何实例属性。问题在于,无论递归调用返回什么,不管它成功还是失败,都会返回。只有在递归过程中找到密钥时才应该返回,否则应该继续循环
顺便问一下,为什么这是一个非静态函数?它似乎不需要任何实例属性。您可以显示并将输出放入您的问题中吗?一个多维数组的示例…为什么不使用内置于PHP函数的array\u key\u exists?我认为此链接有更智能的解决方案来检查数组键的存在。你能展示一下你的问题中的输出吗?一个多维数组的例子…你为什么不使用array\u key\u exists内置的PHP函数?我认为这个链接有更聪明的解决方案来检查数组键的存在。谢谢你,巴尔马-今天下午晚些时候我会试试你的建议。关于方法是否为静态的问题,您是对的,它不需要实例属性。但是,我不确定如何使该方法成为静态将有助于应用程序。该方法存在于我的对象中,作为数据结构变化过程的一部分,数据结构存在于我的每个值对象中。在这个阶段,我还没有发现这种方法的另一个用途。如果有其他必要使它保持静态,那么我当然应该考虑一下。你能解释一下我为什么要把它设为静态的吗?这只是一个原因。如果一个方法不依赖于该实例,那么将其设置为静态可以清楚地说明这一点。在实现中可能也有一些效率,因为非静态方法接收$this作为隐式参数传递的参数少了一个,并且方法查找不必扫描虚拟表。谢谢Barmar+关于静态方法的提示-值得思考。谢谢Barmar-今天下午晚些时候我会尝试你的建议。关于方法是否为静态的问题,您是对的,它不需要实例属性。但是,我不确定如何使该方法成为静态将有助于应用程序。该方法存在于我的对象中,作为数据结构变化过程的一部分,数据结构存在于我的每个值对象中。在这个阶段,我还没有发现这种方法的另一个用途。如果有其他必要使它保持静态,那么我当然应该考虑一下。你能解释一下我为什么要把它设为静态的吗?这只是一个原因。如果一个方法不依赖于该实例,那么将其设置为静态可以清楚地说明这一点。在实现中可能也有一些效率,因为非静态方法接收$this作为隐式参数传递的参数少了一个,并且方法查找不必扫描虚拟表。谢谢Barmar+1对于静态方法的提示-思考的食物。
Array (
[0] => Array ( [reset_time] => 2013-12-11 22:24:25 )
[1] => Array ( [email] => someone@example.com )
)
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;
}