user3672971
user3672971

Reputation: 65

Array replace not working

The below is my array, where I need to replace the value of 'battle_health'

$battlepokemon= array();

$i = 1;
while($rows = mysql_fetch_assoc($res))
{
$path = mysql_query(" SELECT * FROM pokemons WHERE pk_id = '".$rows['pkmn_id']."' ");
$pokemon = array(
'opponent_increment' => $i,
'id' => $rows['pkmn_id'],
'battle_poke'=> mysql_result($path,0,"path"),
'battle_level' => $rows['level'],
'battle_health' => $rows['health']
);
$i++;
$battlepokemon[]= $pokemon;
}

The code for replacement is:

$i = 1;
foreach ($battlepokemon as $key => $value) 
{
if($value['opponent_increment'] == $opponent_increment)
{
$value['battle_health'] = 0;
echo "Data replaced!";
}
$i++;
}
print_r($battlepokemon);

The code above is working..from start to end.. but the value is not replaced with '0' as the code says! I think I must have missed something!

Upvotes: 0

Views: 266

Answers (2)

Vivek Pratap Singh
Vivek Pratap Singh

Reputation: 9974

You can achieve this with for Loop Because unlike foreach loop, it doesn't perform an array copy before transversal:

$arr = array('12', '34');
for($i = 0, $count = count($arr); $i < $count; $i++){
    $arr[$i] = 0;
}
var_dump($arr);

Or If you want to do with Foreach only, you need to avoid new copy of array by passing the reference like:

   $arr = array('12', '34');
   foreach($arr as $key => &$value)
   {
       $value = 0;
   }
   var_dump($arr);

Upvotes: 0

iatboy
iatboy

Reputation: 1293

You need to transfer the reference, not the values. Add a & to the following sentence

foreach ($battlepokemon as $key => &$value) 
                                   ^

I tried this just for example

<?php
$arr = array('12', '34');
foreach($arr as $key => &$value){
  $value = 0;
}
var_dump($arr);
?>

Hopes it can help you

Upvotes: 4

Related Questions