php:如何按键更新关联数组中的值
我很难更新数组中的值。我举了一个简单的例子来说明这一点:数组包含玩家的名字和他们拥有的点数。在每一轮之后,我想像这样更新他们的分数: (不起作用) 一定是什么蠢事,但我已经试了好几个小时了,就是找不到 谢谢你的帮助 您需要添加一个到php:如何按键更新关联数组中的值,php,arrays,associative-array,Php,Arrays,Associative Array,我很难更新数组中的值。我举了一个简单的例子来说明这一点:数组包含玩家的名字和他们拥有的点数。在每一轮之后,我想像这样更新他们的分数: (不起作用) 一定是什么蠢事,但我已经试了好几个小时了,就是找不到 谢谢你的帮助 您需要添加一个到$player: $players = array ( array ( "id" => 0, "name" => "John", "points" => 0 ), array (
$player
:
$players = array (
array (
"id" => 0,
"name" => "John",
"points" => 0
),
array (
"id" => 1,
"name" => "Chris",
"points" => 0
),
array (
"id" => 2,
"name" => "Peter",
"points" => 0
),
array (
"id" => 3,
"name" => "Greg",
"points" => 0
),
);
$points0 = 10;
$points1 = 20;
$points2 = 30;
$points3 = 40;
$i = 0;
foreach ($players as &$player) {
if ($player["id"] == $i) {
$player["points"] = ${"points".$i};
}
$i++;
}
关键部分是
foreach
语句中的符号&
。没有它,您就不会记录对阵列的任何更改。似乎您希望使用循环来记录更改。如果是这种情况,您可能需要考虑将<代码> $Poxs/Cuff>变量更改为数组,如下面的代码演示:
<?php
$players = array (
array (
"id" => 0,
"name" => "John",
"points" => 0
),
array (
"id" => 1,
"name" => "Chris",
"points" => 0
),
array (
"id" => 2,
"name" => "Peter",
"points" => 0
),
array (
"id" => 3,
"name" => "Greg",
"points" => 0
),
);
// IF YOU INTEND TO ASSIGN THE VALUES USING A LOOP, IT IS SUGGESTED TO
// RATHER MAKE $points AN ARRAY WITH EACH KEY CORRESPONDING TO THE KEY OF THE
// MULTIDIMENSIONAL ARRAY $players AND THE VALUE BEING THE POINT TO BE ASSIGNED
// TO THE SUB-ARRAY WITH THAT KEY LIKE SO:
$points = [
0 => 10,//IMPLIES: TARGET $players[0] & ADD 10 TO ITS points ITEM: "John"
1 => 20,//IMPLIES: TARGET $players[1] & ADD 20 TO ITS points ITEM: "Chris"
2 => 30,//IMPLIES: TARGET $players[2] & ADD 30 TO ITS points ITEM: "Peter"
3 => 40,//IMPLIES: TARGET $players[3] & ADD 40 TO ITS points ITEM: "Greg"
];
// NOW LOOP THROUGH THE $players MULTIDIMENSIONAL ARRAY...
// AS YOU ITERATE THROUGH IT, TRY TO OBTAIN THE POINTS FROM THE $points ARRAY
// USING THE LOOP INDEX ($key)....
// IT IS ALSO IMPORTANT TO WORK WITH EACH PLAYER BY REFERENCE
// USING THE & OPERATOR
foreach ($players as $key=>&$player) { // NOTICE THE &$player here
$currentPlayersPoints = $points[$key];
// HAVING OBTAINED THE CURRENT PLAYER'S POINTS,
// SIMPLY ADD THE VALUE TO THE THE ORIGINAL points ELEMENT
$player['points'] += (int)$currentPlayersPoints;
}
// CHECK OUT YOUR RESULT::
var_dump($players);
// YIELDS:
array (size=4)
0 =>
array (size=3)
'id' => int 0
'name' => string 'John' (length=4)
'points' => int 10
1 =>
array (size=3)
'id' => int 1
'name' => string 'Chris' (length=5)
'points' => int 20
2 =>
array (size=3)
'id' => int 2
'name' => string 'Peter' (length=5)
'points' => int 30
3 =>
array (size=3)
'id' => int 3
'name' => string 'Greg' (length=4)
'points' => int 40
您调试代码了吗?查看压缩和分配之间的差异$player[“points”]==${“points”。$i}代码>你在这里比较,你想分配我相信$player[“points”]=${“points”。$I}代码>-编辑:第一位;-)您可能希望对点使用数组<代码>$points[0]=10$点[1]=20代码>等等。然后你可以做foreach($player作为$player){$player['points']=$points[$player['id']];}
@Fred ii-在这种情况下,{}
意味着什么(变量)?那是不是叫了个名字好让我读一下?@AntonisTsimourtos variables-variable-dam。。。为什么呢?我不明白。谢谢@罗德赫
<?php
$players = array (
array (
"id" => 0,
"name" => "John",
"points" => 0
),
array (
"id" => 1,
"name" => "Chris",
"points" => 0
),
array (
"id" => 2,
"name" => "Peter",
"points" => 0
),
array (
"id" => 3,
"name" => "Greg",
"points" => 0
),
);
// IF YOU INTEND TO ASSIGN THE VALUES USING A LOOP, IT IS SUGGESTED TO
// RATHER MAKE $points AN ARRAY WITH EACH KEY CORRESPONDING TO THE KEY OF THE
// MULTIDIMENSIONAL ARRAY $players AND THE VALUE BEING THE POINT TO BE ASSIGNED
// TO THE SUB-ARRAY WITH THAT KEY LIKE SO:
$points = [
0 => 10,//IMPLIES: TARGET $players[0] & ADD 10 TO ITS points ITEM: "John"
1 => 20,//IMPLIES: TARGET $players[1] & ADD 20 TO ITS points ITEM: "Chris"
2 => 30,//IMPLIES: TARGET $players[2] & ADD 30 TO ITS points ITEM: "Peter"
3 => 40,//IMPLIES: TARGET $players[3] & ADD 40 TO ITS points ITEM: "Greg"
];
// NOW LOOP THROUGH THE $players MULTIDIMENSIONAL ARRAY...
// AS YOU ITERATE THROUGH IT, TRY TO OBTAIN THE POINTS FROM THE $points ARRAY
// USING THE LOOP INDEX ($key)....
// IT IS ALSO IMPORTANT TO WORK WITH EACH PLAYER BY REFERENCE
// USING THE & OPERATOR
foreach ($players as $key=>&$player) { // NOTICE THE &$player here
$currentPlayersPoints = $points[$key];
// HAVING OBTAINED THE CURRENT PLAYER'S POINTS,
// SIMPLY ADD THE VALUE TO THE THE ORIGINAL points ELEMENT
$player['points'] += (int)$currentPlayersPoints;
}
// CHECK OUT YOUR RESULT::
var_dump($players);
// YIELDS:
array (size=4)
0 =>
array (size=3)
'id' => int 0
'name' => string 'John' (length=4)
'points' => int 10
1 =>
array (size=3)
'id' => int 1
'name' => string 'Chris' (length=5)
'points' => int 20
2 =>
array (size=3)
'id' => int 2
'name' => string 'Peter' (length=5)
'points' => int 30
3 =>
array (size=3)
'id' => int 3
'name' => string 'Greg' (length=4)
'points' => int 40