Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

155
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda