我创建了这样的函数,用于从我的数组中找到下一个元素
protected function getProject($array, $slug, $next = 999)
{
foreach($array as $key => $project)
{
if($project->getSlug() == $slug) {
return $this->getNextProject($array, $slug, $key + 1);
}
}
}
但结果我有错误"' 100'的最大功能嵌套级别到达,堕胎"。我知道有一个getSlug()isset。请帮我解决这个问题
答案 0 :(得分:0)
在php.ini
中增加xdebug的限制
例如,将嵌套级别限制为300:
xdebug.max_nesting_level=300
您还可以在php.ini
中注释掉这一行以删除限制约束:
";xdebug.max_nesting_level"
答案 1 :(得分:0)
你有一个无限循环/无限递归。
foreach($array as $key => $project)
{
if($project->getSlug() == $slug) {
return $this->getNextProject($array, $slug, $key + 1);
}
// ...
}
如果有$array
个元素符合条件$project->getSlug() == $slug
,它会再次调用getNextProject()
,这将再次运行此foreach
,从而调用getNextProject()
再...等等。
你需要在这里重新排序/重新思考你的逻辑。您可以尝试将if($next != 999) {
移至foreach
的顶部。
试试这个:
protected function getNextProject($array, $slug, $next = 999)
{
foreach($array as $key => $project)
{
if($next != 999 && $next == $key) {
return $project->getSlug();
}
if($project->getSlug() == $slug) {
return $this->getNextProject($array, $slug, $key + 1);
}
}
}
或者更好的是,您可以使用一个循环并且不进行递归来执行此操作:
protected function getNextProject($array, $slug)
{
foreach($array as $key => $project)
{
if($project->getSlug() == $slug && isset($array[$key+1])){
return $array[$key+1]->getSlug();
}
}
}
找到与$slug
匹配的第一个元素,然后获取下一个元素并返回其slug。
答案 2 :(得分:0)
我认为它创造新功能的最佳方式,女巫看起来像这样:
public function yourAction($array, $key)
{
foreach($array as $index => $project) {
if($index == $key) {
return $project->getProduct();
}
}
}
然后像美国一样
if($project->getProduct() == $slug) {
$nextProduct = $this->yourAction($array, $key + 1)
return $nextProject;
}