替换多维数组中的值

时间:2013-04-04 10:02:19

标签: php arrays

我的数组格式如下:

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]
        )
)

我想用 0 替换'empty'而不更改数组结构和元素位置。我坚持怎么办..

3 个答案:

答案 0 :(得分:5)

您可以使用array_walk_recursive功能:

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

array_walk_recursive($your_array, 'replace_empty');

答案 1 :(得分:2)

您可以使用array_walk_recursive函数,其回调函数将empty替换为0


例如,考虑到你的数组以这种方式声明:

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

注意:我猜你做了一个拼写错误,你的数组不仅包含一个字符串,而是包含几个子元素。


你可以使用这种代码:

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


使用以下回调功能:

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

请注意:

  • 第一个参数是通过引用传递的!
    • 表示修改它会修改数组中的相应值
  • 我正在使用===运算符进行比较


你会得到以下输出:

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 :(得分:0)

我会foreach在两个指数中(未经测试):

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

(我假设empty是一个字符串)

修改

如果此[1990,0.00]不是数组而是字符串,则可以使用str_replace

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