PHP 如果没有元素则不解析数组

PHP Array not parsed if there is no element

我得到以下数组:

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 个数字的最终数组(不是键=>值对)。如果没有数字(比如这里的四月),我希望数组中的数字设置为零。一切正常,直到 for 循环到达省略的月份。它按预期将数组中第 4 个数字的值设置为零,但之后数组中的所有剩余元素都设置为零,而不考虑 May 的值实际存在的事实。前 3 个月的数据被正确解析,即我的最终数组中的元素不为零 (2、74、233)。有人知道这样做的原因吗? 谢谢

$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 => isset($delivbymonth[0]['month']) && ("01" == 1) -> true
  • $i = 1 => isset($delivbymonth[1]['month']) && ("02" == 2) -> true
  • $i = 2 => isset($delivbymonth[2]['month']) && ("03" == 3) -> true
  • $i = 3 => isset($delivbymonth[3]['month']) && ("05" == 4) -> FALSE

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

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

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