【array_merge】array_merge引起的一个bug【原创】

工作中采用数组合并,例子如下:
  1. $aaa = M('lottery')->where($where)->field('id, title as name, type, statdate as starttime, enddate as endtime, status')->order('id desc')->select();
  2. $bbb = M('shakelottery')->where($where)->field('id, action_name as name, 3 as type, starttime, endtime, status')->order('id desc')->select();
  3. $ccc = M('cointree')->where($where)->field('id, action_name as name, 1000 as type, starttime, endtime, status')->order('id desc')->select();
  4. $data = array_merge($aaa, $bbb, $ccc);
由于从数据库中获取数据的,所以每个数组的形式都是类似:
  1. $ccc = array(
  2. 0 =>
  3. array (
  4. 'id' => '166',
  5. 'name' => '何摇钱001',
  6. 'type' => '1000',
  7. 'starttime' => '1475908080',
  8. 'endtime' => '1478586480',
  9. 'status' => '1',
  10. ),
  11. 1 =>
  12. array (
  13. 'id' => '160',
  14. 'name' => '111',
  15. 'type' => '1000',
  16. 'starttime' => '1473234420',
  17. 'endtime' => '1475826420',
  18. 'status' => '1',
  19. ),
  20. 2 =>
  21. array (
  22. 'id' => '158',
  23. 'name' => '积分',
  24. 'type' => '1000',
  25. 'starttime' => '1473234180',
  26. 'endtime' => '1475826180',
  27. 'status' => '1',
  28. ),
  29. 3 =>
  30. array (
  31. 'id' => '156',
  32. 'name' => '不需要积分摇钱树',
  33. 'type' => '1000',
  34. 'starttime' => '1473231360',
  35. 'endtime' => '1475823360',
  36. 'status' => '1',
  37. ),
  38. );
都是类似这样的,所以合并类似的3个数组呢,是没问题的。但是今天合并的时候出来的是NULL,然后发现是$bbb在数据库中并没有数据,也就是$bbb = null,这样在合并的时候呢,最后出来的是null。
即:
  1. $aaa = array(
  2. 0 =>
  3. array (
  4. 'id' => '386',
  5. 'name' => '何大转盘002',
  6. 'type' => '1',
  7. 'starttime' => '1475921400',
  8. 'endtime' => '1478513400',
  9. 'status' => '1',
  10. ),
  11. 1 =>
  12. array (
  13. 'id' => '384',
  14. 'name' => '何刮刮卡01',
  15. 'type' => '2',
  16. 'starttime' => '1475907660',
  17. 'endtime' => '1478499660',
  18. 'status' => '1',
  19. ),
  20. 2 =>
  21. array (
  22. 'id' => '382',
  23. 'name' => '何大转盘01',
  24. 'type' => '1',
  25. 'starttime' => '1475907540',
  26. 'endtime' => '1478499540',
  27. 'status' => '1',
  28. ),
  29. 3 =>
  30. array (
  31. 'id' => '374',
  32. 'name' => '幸运大转盘活动开始了',
  33. 'type' => '1',
  34. 'starttime' => '1473235800',
  35. 'endtime' => '1475827800',
  36. 'status' => '1',
  37. )
  38. );
  39. $bbb = NULL;
  40. $ccc = array(
  41. 0 =>
  42. array (
  43. 'id' => '166',
  44. 'name' => '何摇钱001',
  45. 'type' => '1000',
  46. 'starttime' => '1475908080',
  47. 'endtime' => '1478586480',
  48. 'status' => '1',
  49. ),
  50. 1 =>
  51. array (
  52. 'id' => '160',
  53. 'name' => '111',
  54. 'type' => '1000',
  55. 'starttime' => '1473234420',
  56. 'endtime' => '1475826420',
  57. 'status' => '1',
  58. ),
  59. 2 =>
  60. array (
  61. 'id' => '158',
  62. 'name' => '积分',
  63. 'type' => '1000',
  64. 'starttime' => '1473234180',
  65. 'endtime' => '1475826180',
  66. 'status' => '1',
  67. ),
  68. 3 =>
  69. array (
  70. 'id' => '156',
  71. 'name' => '不需要积分摇钱树',
  72. 'type' => '1000',
  73. 'starttime' => '1473231360',
  74. 'endtime' => '1475823360',
  75. 'status' => '1',
  76. ),
  77. );
  78. $data = array_merge($aaa, $bbb, $ccc);
  79. dump($data);
结果会是null。
查文档发现该array_merge该函数只能接受数组类型的参数,如果不是,则会返回null。所以呢,需要对参数进行数组化,即:
  1. $data = array_merge((array)$aaa, (array)$bbb, (array)$ccc);
这样就可以了,即使$bbb = null也会跳过$bbb进行合并的。
posted @ 2016-11-20 12:59  Newman·Li  阅读(247)  评论(0编辑  收藏  举报