将值添加到相同的数组键中
Add values into same array key
我确定这是一个愚蠢的问题,但我不明白原因。为什么我不能将值添加到同一个数组键中?值被覆盖。
$rows=array();
while($row = mysqli_fetch_array($result)) {
$rows[strval($row['year'])]=array('month'=>$row['month'],'satisfaction'=>$row['sat_per_month']);
}
数组索引是唯一的。下面的代码应该适用于您的情况。
$rows=array();
while($row = mysqli_fetch_array($result)) {
$rows[strval($row['year'])][] = array('month'=>$row['month'],'satisfaction'=>$row['sat_per_month']);
}
现在我假设您想要一个多维数组,其中包含年份,每行中包含月份和满意度作为数组。您只需使用 $rows[strval($row['year']][]
附加它,因为每个数组键都是唯一的,您当前只需覆盖它。
因此您的代码如下所示:
$rows=array();
while($row = mysqli_fetch_array($result)) {
$rows[strval($row['year'])][] = array('month'=>$row['month'],'satisfaction'=>$row['sat_per_month']);
}
希望我正确理解了你的问题。一个数组键只能存储一个值(或一组值)所以:
$array[$key] = $value; //will overwrite what is under that key
$array[$key][] = $value //will add a value as a new sub-array node resulting in:
array(
'key' => array (
'0' => 'value',
),
)
在PHP(以及几乎所有编程语言)中,数组索引是唯一的。这意味着 $arr["teletubbies"] 不能同时是 "lala" 和 "noonoo"。这是出于一个简单的原因,如果你稍后调用 $arr["teletubbies"] PHP 则无法知道你的意思是 "lala" 还是 "noonoo"。
为了解决这个问题(你想要一些按年份排序的东西,例如 2014),建议将与键 2014 相关的值创建一个新数组,从而创建一个多维数组。您似乎明白这一点,但是您的实现是错误的,因为您现在只是将 $rows[strval($row['year'])] 更改为新内容而不是 appending新值。
这个问题有多种解决方案:
解决方案一:
$rows=array();
while($row = mysqli_fetch_array($result)) {
//The syntax [] means: insert after the last defined key, more information at: http://php.net/manual/en/language.types.array.php look for $arr[] = 56;
$rows[strval($row['year'])][] = array('month'=>$row['month'],'satisfaction'=>$row['sat_per_month']);
}
方案二:
$rows=array();
while($row = mysqli_fetch_array($result)) {
//Make sure $rows[strval($row['year'])] is an array
if (!isset($rows[strval($row['year'])])) $rows[strval($row['year'])] = Array();
//array_push pushes a new array element to the last element of an array, documentation here: http://php.net/manual/en/function.array-push.php
array_push($rows[strval($row['year'])],array('month'=>$row['month'],'satisfaction'=>$row['sat_per_month']));
}
可能还有其他几种解决方案,但您明白了。
要稍后调用 $rows[strval($row['year'])] 之一,您必须确保调用新创建的索引!例如:
//Three indexes! 1st is the year, 2nd is the nth child you added and third is Array("month" => "..", "satisfaction" => "...");
print_r($rows["2014"][5]);
或
echo $rows["2014"][3]["month"]." ".$rows["2014"][3]["satisfaction"];
我确定这是一个愚蠢的问题,但我不明白原因。为什么我不能将值添加到同一个数组键中?值被覆盖。
$rows=array();
while($row = mysqli_fetch_array($result)) {
$rows[strval($row['year'])]=array('month'=>$row['month'],'satisfaction'=>$row['sat_per_month']);
}
数组索引是唯一的。下面的代码应该适用于您的情况。
$rows=array();
while($row = mysqli_fetch_array($result)) {
$rows[strval($row['year'])][] = array('month'=>$row['month'],'satisfaction'=>$row['sat_per_month']);
}
现在我假设您想要一个多维数组,其中包含年份,每行中包含月份和满意度作为数组。您只需使用 $rows[strval($row['year']][]
附加它,因为每个数组键都是唯一的,您当前只需覆盖它。
因此您的代码如下所示:
$rows=array();
while($row = mysqli_fetch_array($result)) {
$rows[strval($row['year'])][] = array('month'=>$row['month'],'satisfaction'=>$row['sat_per_month']);
}
希望我正确理解了你的问题。一个数组键只能存储一个值(或一组值)所以:
$array[$key] = $value; //will overwrite what is under that key
$array[$key][] = $value //will add a value as a new sub-array node resulting in:
array(
'key' => array (
'0' => 'value',
),
)
在PHP(以及几乎所有编程语言)中,数组索引是唯一的。这意味着 $arr["teletubbies"] 不能同时是 "lala" 和 "noonoo"。这是出于一个简单的原因,如果你稍后调用 $arr["teletubbies"] PHP 则无法知道你的意思是 "lala" 还是 "noonoo"。
为了解决这个问题(你想要一些按年份排序的东西,例如 2014),建议将与键 2014 相关的值创建一个新数组,从而创建一个多维数组。您似乎明白这一点,但是您的实现是错误的,因为您现在只是将 $rows[strval($row['year'])] 更改为新内容而不是 appending新值。
这个问题有多种解决方案:
解决方案一:
$rows=array();
while($row = mysqli_fetch_array($result)) {
//The syntax [] means: insert after the last defined key, more information at: http://php.net/manual/en/language.types.array.php look for $arr[] = 56;
$rows[strval($row['year'])][] = array('month'=>$row['month'],'satisfaction'=>$row['sat_per_month']);
}
方案二:
$rows=array();
while($row = mysqli_fetch_array($result)) {
//Make sure $rows[strval($row['year'])] is an array
if (!isset($rows[strval($row['year'])])) $rows[strval($row['year'])] = Array();
//array_push pushes a new array element to the last element of an array, documentation here: http://php.net/manual/en/function.array-push.php
array_push($rows[strval($row['year'])],array('month'=>$row['month'],'satisfaction'=>$row['sat_per_month']));
}
可能还有其他几种解决方案,但您明白了。
要稍后调用 $rows[strval($row['year'])] 之一,您必须确保调用新创建的索引!例如:
//Three indexes! 1st is the year, 2nd is the nth child you added and third is Array("month" => "..", "satisfaction" => "...");
print_r($rows["2014"][5]);
或
echo $rows["2014"][3]["month"]." ".$rows["2014"][3]["satisfaction"];