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。
我得到以下数组:
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。