将值添加到同一个数组键中

时间:2015-08-12 08:00:48

标签: php arrays key

我确定这是一个愚蠢的问题,但我不明白其中的原因。为什么我不能将值添加到同一个数组键中?价值被覆盖。

$rows=array();
while($row = mysqli_fetch_array($result)) {
    $rows[strval($row['year'])]=array('month'=>$row['month'],'satisfaction'=>$row['sat_per_month']);
}

4 个答案:

答案 0 :(得分:2)

现在我假设您想要一个多维数组,其中包含年份和每行内部的月份和满意度数组。您只需使用$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']);
}

答案 1 :(得分:1)

数组索引是唯一的。以下代码适用于您的情况。

$rows=array();
while($row = mysqli_fetch_array($result)) {
    $rows[strval($row['year'])][] = array('month'=>$row['month'],'satisfaction'=>$row['sat_per_month']);
}

答案 2 :(得分:1)

希望我能正确理解你的问题。一个数组键只能存储一个值(或一个值数组),所以:

https://[Jenkins-Server]/buildByToken/build?job=[job-name]&token=[token]

答案 3 :(得分:1)

在PHP(以及几乎所有编程语言)中,数组索引是唯一的。这意味着$ arr [" teletubbies"]不能成为" lala"和" noonoo"同时。原因很简单,如果你以后再调用$ arr [" teletubbies"],PHP就无法知道你是否意味着" lala"或" noonoo"然后。

要解决此问题(您希望按年份排序某些内容,例如2014年),建议将与2014关键字相关的值设为新数组,从而创建多维数组。你似乎明白这一点,但你的实现是错误的,因为你现在只是将$ rows [strval($ row [' year'])]更改为新的而不是追加新的价值观。

这个问题有多种解决方案:

解决方案1:

$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']);
}

解决方案2:

$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"];