PHP Ferrari
PHP Ferrari

Reputation: 15664

Replace value in multi dimension array

I have array format like:

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 change the array structure and elements position. I stuck how to do..

Upvotes: 3

Views: 159

Answers (3)

Tony Stark
Tony Stark

Reputation: 8094

You could use the array_walk_recursive function, with a callback function that would replace empty by 0.


For example, considering your array is declared this way :
$myArray[0] = array(23, empty, 43, 12);
$myArray[1] = array(empty, empty, 53, 19);

Note : I supposed you made a typo, and your arrays are not containing only a string, but several sub-elements.


You could use this kind of code :
array_walk_recursive($myArray, 'replacer');
var_dump($myArray);

With the following callback functon :
function replacer(& $item, $key) {
    if ($item === empty) {
        $item = 0;
    }
}

Note that :

  • the first parameter is passed by reference !
    • which means modifying it will modify the corresponding value in your array
  • I'm using the === operator for the comparison

And you'd get the following output :
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)
  

Upvotes: 2

Voitcus
Voitcus

Reputation: 4456

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] is not an array but a string, you could use str_replace instead

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

Upvotes: 0

m4t1t0
m4t1t0

Reputation: 5731

You can use array_walk_recursive function:

function replace_empty(&$item, $key) {
    $item = str_replace('empty', '0', $item);
}

array_walk_recursive($your_array, 'replace_empty');

Upvotes: 5

Related Questions