PHP中有没有办法在foreach中重新启动循环,或者在开关中更改测试值?

Posted

技术标签:

【中文标题】PHP中有没有办法在foreach中重新启动循环,或者在开关中更改测试值?【英文标题】:is there a way in PHP to restart a loop in a foreach, or change the test value in a switch? 【发布时间】:2012-11-14 15:47:59 【问题描述】:

如果我在一个数组上循环,而在其中一个循环的中间,我发现了一些小问题,改变......一些东西......,并且需要再试一次......有没有办法跳回循环顶部而不从数组中抓取下一个值?

我怀疑这是否存在,但它会是一些关键字,如 continuebreak。事实上,它很像continue,只是它不获取下一项,而是保持它在内存中的内容。

如果什么都不存在,我可以在数组中插入一些东西,使其成为循环中的下一个键/值吗?

也许这会更容易一段时间(array_shift())...

或者我认为循环内的递归函数可能会起作用。

嗯,我的问题随着我输入这个而不断发展,所以请查看这个伪代码:

foreach($storage_locations as $storage_location) 
    switch($storage_location)
        case 'cookie':
            if(headers_sent()) 
                // cannot store in cookie, failover to session
                // what can i do here to run the code in the next case?
                // append 'session' to $storage_locations?
                // that would make it run, but other items in the array would run first... how can i get it next?
             else 
                set_cookie();
                return;
            
        break;

        case 'session':
            set_session();
            return;
        break;
    

我确定没有关键字可以更改在交换机中途测试的值...那么我应该如何重构此代码以进行故障转移?

【问题讨论】:

de1.php.net/manual/de/function.reset.php 不成功吗? 【参考方案1】:

不是foreach,而是更多的手动数组迭代:

while (list($key, $value) = each($array)) 
    if (...) 
        reset($array); // start again
    

http://php.net/eachhttp://php.net/reset

似乎一个简单的失败就可以解决问题:

switch ($storage_location) 
    case 'cookie':
        if (!headers_sent()) 
            set_cookie();
            break;
        

        // falls through to next case

    case 'session':

【讨论】:

以上是关于PHP中有没有办法在foreach中重新启动循环,或者在开关中更改测试值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 的 PHP/Blade 中使用 Foreach 循环?

在 foreach 循环中使用 Intro.js 的 php 问题

有没有办法在 foreach 循环中遍历命名空间中的所有类型? [复制]

PHP foreach循环中的多个索引变量

有啥办法可以打破 foreach 循环?

在 foreach 循环中每次迭代后 PHP 回显