3

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..

3 Answers 3

5

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');
Sign up to request clarification or add additional context in comments.

Comments

2

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)
  

Comments

0

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);
    }
  }
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.