zoukankan      html  css  js  c++  java
  • 【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进行合并的。
  • 相关阅读:
    Vue 介绍
    Django 组件-分页器
    Django 组件content_type
    DRF 解析器组件
    Django
    Django 组件-ModelForm
    Django 组件-用户认证
    Django 组件-中间件
    Django 组件-cookie与session
    Django CBV与FBV
  • 原文地址:https://www.cnblogs.com/linewman/p/9918125.html
Copyright © 2011-2022 走看看