PHP在Foreach循环中运行卷曲函数

时间:2017-04-11 20:26:03

标签: php curl foreach

我必须以每批CURL 150个批次的倍数发送短信。这是我的代码,

$mobiles = "9844700001,9844700002,9844700003,9844700004;9844700005
 9844700006,9844700007,9844700008,9844700009,9844700010,.... upto 1000 numbers"
$rmobiles = preg_split('/[\ \n\r\;\:\,]+/', $mobiles, -1, PREG_SPLIT_NO_EMPTY);
if(count($rmobiles) <= 1000){
    foreach($rmobiles as $key => $value){
        if ($key % 150 == 0) {
            //Generate a new random ID
            $randno = rand(0,10000);
        }
        $this->addtoDB("00000", $value, $randno);
    } 
    return $this->sendmsms($randno);
} else {
    echo "error, max 1000";
}

由于sendmsms函数在foreach循环之外,它只发送带有随机数的最后一批,如果我在foreach循环中包含sendmsms函数,那么该函数将运行尽可能多的移动数字那里。

我应该如何根据生成的sendmsms运行randno函数,以便我的curl函数sendmsms能够正常运行并真正生成db记录。

修改

我再次尝试这样,但它在我的数据库中插入单个记录。

    foreach($rmobiles as $key => $value){
        if ($key % 150 == 0) {
            //Generate a new random ID
            $randno = rand(0,10000);
        }
        $this->addtoDB("00000", $value, $randno);
        if ($key % 150 == 0) {
            return $this->sendmsms($randno);
        }
    } 

编辑2

我甚至尝试为randno创建数组。但只有第一批,而不是全部7批。

    $arr = array();
    foreach($rmobiles as $key => $value){
        if ($key % 150 == 0) {
            //Generate a new random ID
            $randno = rand(0,10000);
            $arr[] = $randno;
        }
        $this->addtoDB("00000", $value, $randno);
    }
    foreach($arr as $k => $v){
        return $this->sendmsms($v);
    }

当我回应它时,它完美地显示,但通过DB它只进行了一批。可能是什么原因?

1 个答案:

答案 0 :(得分:1)

我想到的一个解决方案是使用array_chunk()将$ rmobile分成多个数组,每个数组最多包含150个元素。不确定你的sendmsms函数是否需要字符串或数组,但这样的事情可能会让你走上正轨:

$mobiles = "9844700001,9844700002,9844700003,9844700004;...";
$rmobiles = preg_split('/[\ \n\r\;\:\,]+/', $mobiles, -1, PREG_SPLIT_NO_EMPTY);
foreach (array_chunk($rmobiles, 150) as $batch) {
    $this->sendmsms(implode(',',$batch));
}