为了账号安全,请及时绑定邮箱和手机立即绑定

从 PHP 中的回调函数中跳出循环

从 PHP 中的回调函数中跳出循环

PHP
大话西游666 2021-09-18 13:57:54
对于一个项目,我正在运行大量数据吞吐量,需要对其进行分块以进行处理。此过程针对不同的用户运行多次。所有这些都运行良好。有时,处理需要抛出停止错误以优雅地中断脚本(即:不使用die()而是记录错误)并继续处理下一个用户的数据。这是我的脚本的一个非常简化的版本。我知道这可以在这种简单的模式下重新排列以完全删除回调函数,但实际的脚本要求它像这样设置。<?php$user_data = array(    'User 1' => array(        array(            1,2,3,4,5,6,7,8,9,        ),        array(            10,11,12,13,14,15,16,17,18,        ),    ),    'User 2' => array(        array(            1,2,3,4,5,6,7,8,9,10        ),        array(            11,12,13,14,15,16,17,18,19,20        ),    ),);foreach($user_data as $data_chunks){    foreach($data_chunks as $data_set){        foreach($data_set as $data){            myFunction($data, function($returned_data, $stop){                if($stop){                    //log error                    break 2;                }                print $returned_data." ";            });        }    }}function myFunction($data, callable $f){    $stop = false;    if($data>5){        $stop = true;    }    $data_to_return = $data*2;    $f($data_to_return,$stop);}?>PHP抛出一个致命错误致命错误:无法打破/继续 2 个级别
查看完整描述

1 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

您能否让 myFunction 返回一个值来指示循环是否应该停止?


foreach($user_data as $data_chunks){

    foreach($data_chunks as $data_set){

        foreach($data_set as $data){

            // V-- Collect return value below

            $returned_stop = myFunction($data, function($returned_data, $stop){

                if($stop){

                    //log error

                }

                print $returned_data." ";

            });

            if ($returned_stop) { // <- Check to stop here

              break 2;

            }

        }

    }

}


function myFunction($data, callable $f){

    $stop = false;

    if($data>5){

        $stop = true;

    }

    $data_to_return = $data*2;

    $f($data_to_return,$stop);

    return($stop); // <- Return here

}


查看完整回答
反对 回复 2021-09-18
  • 1 回答
  • 0 关注
  • 159 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信