Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

154
Visualizações
php: cómo actualizar un valor en una matriz asociativa por clave

Me está costando mucho intentar actualizar los valores de mi matriz. Hice un ejemplo simple para ilustrar esto: la matriz contiene los nombres de los jugadores y la cantidad de puntos que tienen. Después de cada ronda quiero actualizar sus puntos así:

(que no funciona)

 $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);

Debe ser algo estúpido, pero llevo horas intentándolo y no lo encuentro.

¡Gracias por la ayuda!

about 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Debe agregar una referencia a $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++; }

La parte crucial es el ampersand & en la instrucción foreach . Sin él, no está registrando ningún cambio en la matriz.

about 4 years ago · Santiago Trujillo Relatório

0

Parece que le gustaría hacer eso usando un bucle. Si ese es el caso, es posible que desee considerar cambiar la variable $points a una matriz como lo demuestra el código a continuación:

 <?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
about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda