我必须以每批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);
}
}
我甚至尝试为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它只进行了一批。可能是什么原因?
答案 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));
}