mk_89
mk_89

Reputation: 2742

Setting a multi-dimensional array value

I have an array that looks like...

$arr = array(
   array(
      "server_name"    => "server_a",
      "server_number"  => "1",
      "server_status"  => "OPEN" 
   ),
   array(
      "server_name"   => "server_b",
      "server_number" => "2",
      "server_status" => "CLOSED" 
   )
);

I am trying to set the index value of "server_status" in the following way

foreach($arr as $a){
   $a['server_status'] = "STATUS_".$a['server_status'];
}

This does not seem to be the correct way to set an array value as nothing seems to be happening, what would be the correct way to perform this task?

Upvotes: 0

Views: 47

Answers (2)

Arnaud Le Blanc
Arnaud Le Blanc

Reputation: 99879

You need to iterate by reference:

foreach($arr as &$a) {
   $a['server_status'] = ...;
}

(The only difference from your code is the & before $a in foreach.)

Just don't forget to unset the reference after iterating:

unset($a);

Else, writing to this variable later in the code would override the last element of the array.

See foreach documentation.

Upvotes: 1

ddinchev
ddinchev

Reputation: 34673

You need to foreach by reference, like this:

foreach($arr as &$a){
   $a['server_status'] = "STATUS_".$a['server_status'];
}

Otherwise it does not modify the item of the current iteration - its a copy.

Upvotes: 1

Related Questions