【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进行合并的。