我得到了以下数组:
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)。有人知道原因吗? 谢谢
答案 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 = 3时)条件的一部分
$delivbymonth[$i]['month']==$i+1
计算为false(5 == 4),然后从这一点开始,每个循环都会以else子句结束,导致所有后续元素为0。