douhan9467 2017-04-07 14:05
浏览 75
已采纳

php:如何按键更新关联数组中的值

I'm having a hard time trying to update the values in my array. I made a simple example to illustrate this: the array contains names of players and the amount of points they have. After each round I want to update their points like this:

(which is not working)

 $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++;
 }

 var_dump($players);

Must be something stupid, but I've been trying for hours and I just can't find it.

Thanks for the help!

  • 写回答

2条回答 默认 最新

  • duanfu7994 2017-04-07 14:22
    关注

    You need to add a reference to $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++;
    }
    

    The crucial part is the ampersand & in the foreach statement. Without it you are not recording any changes to the array.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端