4

我的数组格式如下:

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替换“空”而不更改数组结构和元素位置。我卡住了怎么办。。

4

3 回答 3

5

您可以使用array_walk_recursive函数:

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

array_walk_recursive($your_array, 'replace_empty');
于 2013-04-04T10:13:44.923 回答
2

您可以使用该array_walk_recursive函数,其回调函数将替换empty0.


例如,考虑到您的数组是这样声明的:

$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)
于 2013-04-04T10:20:04.050 回答
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);
    }
  }
}
于 2013-04-04T10:07:44.823 回答