Replace value in multidimensional array

I have an array format, for example:

Array ( [Australia] => Array ( [0] => [1990,0.01], [1] => [1991,0.02], [2] => [1992,0.02], [3] => [1993,0.02], [4] => [1994,0.02], [5] => [1995,0.02], [6] => [1996,0.02], [7] => [1997,0.02], [8] => [1998,0.02], [9] => [1999,0.02], [10] => [2000,0.02], [11] => [2001,0.02], [12] => [2002,0.02], [13] => [2003,0.02], [14] => [2004,0.02], [15] => [2005,0.02], [16] => [2006,0.02], [17] => [2007,0.02], [18] => [2008,0.02], [19] => [2009,empty], [20] => [2010,empty], [21] => [2011,empty], [22] => [2012,empty], [23] => [2013,empty], [24] => [2014,empty], [25] => [2015,empty] ) [Pakistan] => Array ( [0] => [1990,0.00], [1] => [1991,0.00], [2] => [1992,0.00], [3] => [1993,0.00], [4] => [1994,0.00], [5] => [1995,0.00], [6] => [1996,0.00], [7] => [1997,0.00], [8] => [1998,0.00], [9] => [1999,0.00], [10] => [2000,0.00], [11] => [2001,0.00], [12] => [2002,0.00], [13] => [2003,0.00], [14] => [2004,0.01], [15] => [2005,0.01], [16] => [2006,0.00], [17] => [2007,0.00], [18] => [2008,0.00], [19] => [2009,empty], [20] => [2010,empty], [21] => [2011,empty], [22] => [2012,empty], [23] => [2013,empty], [24] => [2014,empty], [25] => [2015,empty] ) ) 

and I want to replace 'empty' with 0 without changing the structure of the array and the position of the elements. I'm stuck on how to do this.

+4
source share
3 answers

You can use the array_walk_recursive function :

 function replace_empty(&$item, $key) { $item = str_replace('empty', '0', $item); } array_walk_recursive($your_array, 'replace_empty'); 
+5
source

You can use the array_walk_recursive function with a callback function that array_walk_recursive empty with 0 .


For example, given that your array is declared as follows:

 $myArray[0] = array(23, empty, 43, 12); $myArray[1] = array(empty, empty, 53, 19); 

Note. I assumed that you made a typo, and your arrays do not contain only a string, but several sub-elements.


You can use this code:

 array_walk_recursive($myArray, 'replacer'); var_dump($myArray); 


Using the callback function:

 function replacer(& $item, $key) { if ($item === empty) { $item = 0; } } 

Note that:

  • The first parameter is passed by reference!
    • which means changing it will change the corresponding value in your array
  • I use the === operator to compare


And you will get the following result:

 array( 0 => array 0 => int 23 1 => int 0 2 => int 43 3 => int 12 1 => array 0 => int 0 1 => int 0 2 => int 53 3 => int 19) 
+2
source

I would foreach in both indices (not tested):

 foreach($array as $country){ foreach($country as &$field){ if($field[1] == 'empty'){ $field[1] = 0; } } } 

(I assume empty is a string)

EDIT:

If this [1990,0.00] not an array, but a string, you can use str_replace instead

 foreach($array as $country){ foreach($country as &$field){ $field = str_replace('empty', '0.00', $field); } } } 
0
source

All Articles