【array_merge】array_merge引起的一个bug【原创】
工作中采用数组合并,例子如下:
$aaa = M('lottery')->where($where)->field('id, title as name, type, statdate as starttime, enddate as endtime, status')->order('id desc')->select();$bbb = M('shakelottery')->where($where)->field('id, action_name as name, 3 as type, starttime, endtime, status')->order('id desc')->select();$ccc = M('cointree')->where($where)->field('id, action_name as name, 1000 as type, starttime, endtime, status')->order('id desc')->select();$data = array_merge($aaa, $bbb, $ccc);
由于从数据库中获取数据的,所以每个数组的形式都是类似:
$ccc = array(0 =>array ('id' => '166','name' => '何摇钱001','type' => '1000','starttime' => '1475908080','endtime' => '1478586480','status' => '1',),1 =>array ('id' => '160','name' => '111','type' => '1000','starttime' => '1473234420','endtime' => '1475826420','status' => '1',),2 =>array ('id' => '158','name' => '积分','type' => '1000','starttime' => '1473234180','endtime' => '1475826180','status' => '1',),3 =>array ('id' => '156','name' => '不需要积分摇钱树','type' => '1000','starttime' => '1473231360','endtime' => '1475823360','status' => '1',),);
都是类似这样的,所以合并类似的3个数组呢,是没问题的。但是今天合并的时候出来的是NULL,然后发现是$bbb在数据库中并没有数据,也就是$bbb = null,这样在合并的时候呢,最后出来的是null。
即:
$aaa = array(0 =>array ('id' => '386','name' => '何大转盘002','type' => '1','starttime' => '1475921400','endtime' => '1478513400','status' => '1',),1 =>array ('id' => '384','name' => '何刮刮卡01','type' => '2','starttime' => '1475907660','endtime' => '1478499660','status' => '1',),2 =>array ('id' => '382','name' => '何大转盘01','type' => '1','starttime' => '1475907540','endtime' => '1478499540','status' => '1',),3 =>array ('id' => '374','name' => '幸运大转盘活动开始了','type' => '1','starttime' => '1473235800','endtime' => '1475827800','status' => '1',));$bbb = NULL;$ccc = array(0 =>array ('id' => '166','name' => '何摇钱001','type' => '1000','starttime' => '1475908080','endtime' => '1478586480','status' => '1',),1 =>array ('id' => '160','name' => '111','type' => '1000','starttime' => '1473234420','endtime' => '1475826420','status' => '1',),2 =>array ('id' => '158','name' => '积分','type' => '1000','starttime' => '1473234180','endtime' => '1475826180','status' => '1',),3 =>array ('id' => '156','name' => '不需要积分摇钱树','type' => '1000','starttime' => '1473231360','endtime' => '1475823360','status' => '1',),);$data = array_merge($aaa, $bbb, $ccc);dump($data);
结果会是null。
查文档发现该array_merge该函数只能接受数组类型的参数,如果不是,则会返回null。所以呢,需要对参数进行数组化,即:
$data = array_merge((array)$aaa, (array)$bbb, (array)$ccc);
这样就可以了,即使$bbb = null也会跳过$bbb进行合并的。
浙公网安备 33010602011771号