今天开发时遇到一个批量邮箱账号和批量收件人分组的事,我这里仅仅写了有效的处理方法,而不是最有效率的。因为我想不出其他方法,以此记录,后续有新的方法会更新。
首先我举个例子:
1.我这里有一个10个邮箱账号的表格,导入之后就变成了10个数组,
2.我这里有13个收件人,导入时候变成13个数组
问:怎么才能把13个收件人平均分到10个邮箱号下面呢
我这里用了再繁杂的方法一个个的去排,也就是有多少个收件人就循环多少次,我知道这样的效率会很低,但是没办法,主要先以实现功能为主。
下面就是上代码
$batch_b = $this->import($file2);//批量收件人ss
$batch_a = $this->import($file);//批量账号密码[[1,2],[1,2]]
$data_list = $this->split($batch_b,$batch_a);//按照指定数量区分账号数组
这是获取批量收件人和批量账号我这路举个例子
$batch_b = 13;
$batch_a = 3;
如果按照我在网上找到的方法来说就是分成了7组,但是我想要的是13个平均分到3个账号里
/**
* 按照指定数量分块
* @param unknown $batch_b 批量收件人
* @param number $batch_a 批量账号
* @return array
*/
public function split( $batch_b = null, $batch_a =null )
{
$num = count($batch_a);
foreach ($batch_b as $k=>$v){
//判断循环次数不能大于批量账号数
if($k<$num){
//如果循环次数小于那就选择数组接收
$arrRet[$k][] =$v[0];
}else{
//如果循环次数大于或等于 就会进行取余操作
$c = bcmod($k, $num);//取余
$arrRet[$c][] =$v[0];//根据取余赋值新数组
}
}
return $arrRet;
}
返回的就是一个数量为3的二维数组了
array(3) {
[0]=>
array(5) {
[0]=>
string(21) "timbo62"
[1]=>
string(22) "cgc92596"
[2]=>
string(23) "suedardy12"
[3]=>
string(23) "ehelstrom"
[4]=>
string(21) "mnasisi"
}
[1]=>
array(4) {
[0]=>
string(22) "vanstee"
[1]=>
string(25) "alinchang"
[2]=>
string(17) "1990116"
[3]=>
string(19) "koge"
}
[2]=>
array(4) {
[0]=>
string(24) "antpinz"
[1]=>
string(19) "sgoss411"
[2]=>
string(17) "27358981"
[3]=>
string(21) "lscampo@op"
}
}