数组中的下一个元素

时间:2015-08-27 14:29:48

标签: php

我创建了这样的函数,用于从我的数组中找到下一个元素

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。请帮我解决这个问题

3 个答案:

答案 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;
}