如果没有元素

时间:2016-02-29 13:52:31

标签: php arrays dql

我得到了以下数组:

array(4) {
[0] => array(2) {
    [1] => string(1)
    "2" ["month"] => string(2)
    "01"
}[1] => array(2) {
    [1] => string(2)
    "74" ["month"] => string(2)
    "02"
}[2] => array(2) {
    [1] => string(3)
    "233" ["month"] => string(2)
    "03"
}[3] => array(2) {
    [1] => string(2)
    "21" ["month"] => string(2)
    "05"
}
}

正如您所看到的那样,四月的价值不见了。我解析如下:

$delivbymonth = $query->getResult();//A DQL Query which returns the above array
$MyArray = array();

    for($i=0;$i<=11;++$i)
    {
        if(isset($delivbymonth[$i]['month']) && $delivbymonth[$i]['month']==$i+1)
          {
            $MyArray[$i] = $delivbymonth[$i][1];
          }else{$MyArray[$i]=0;}
    }

所以我想要一个12个数字的最终数组(不是key =&gt;值对)。如果没有数字(比如四月),我希望数组中的数字设置为零。一切正常,直到for循环到达省略的月份。它将数组中第四个数字的值设置为零,但之后,数组中的所有剩余元素都设置为零,而不是关于May的值实际存在的事实。前3个月的数据被正确解析,即我的最终数组中的元素不为零(2,72,233)。有人知道原因吗? 谢谢

1 个答案:

答案 0 :(得分:0)

$myArray = array_fill(0, 12, 0);
foreach ($delivbymonth as $deliv) {
   $myArray[intval($deliv['month'] - 1)] = $deliv[1];
}
var_dump($myArray);

输出:

array(12) { [0] => string(1) "2" [1] => string(2) "74" [2] => string(3) "233" [3] => int(0) [4] => string(2) "21" [5] => int(0) [6] => int(0) [7] => int(0) [8] => int(0) [9] => int(0) [10] => int(0) [11] => int(0) }

<强>解释

原始代码中的以下条件由前3个元素满足。

if(isset($delivbymonth[$i]['month']) && $delivbymonth[$i]['month']==$i+1)
  • $ i = 0 =&gt; isset($ delivbymonth [0] [&#39; month&#39;])&amp;&amp; (&#34; 01&#34; == 1) - &gt;是的
  • $ i = 1 =&gt; isset($ delivbymonth [1] [&#39; month&#39;])&amp;&amp; (&#34; 02&#34; == 2) - &gt;是的
  • $ i = 2 =&gt; isset($ delivbymonth [2] [&#39; month&#39;])&amp;&amp; (&#34; 03&#34; == 3) - &gt;是的
  • $ i = 3 =&gt; isset($ delivbymonth [3] [&#39; month&#39;])&amp;&amp; (&#34; 05&#34; == 4) - &gt; FALSE

然而,在第四个元素(当$ i = 3时)条件的一部分

$delivbymonth[$i]['month']==$i+1

计算为false(5 == 4),然后从这一点开始,每个循环都会以else子句结束,导致所有后续元素为0。