2013-04-04 131 views
4

替换值I有像阵列格式:在多维数组

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

,我想更换“空”与而不改变所述阵列结构和元件位置。我坚持怎么办..

回答

5

可以使用array_walk_recursive功能:

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

array_walk_recursive($your_array, 'replace_empty'); 
+0

哦,谢谢哥们.... :) – 2013-04-04 10:21:03

+0

@ m4t1t0 +1快速回答。 – 2013-04-04 10:35:42

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

您可以使用array_walk_recursive功能,用一个回调函数会被替换0empty


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

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

注:我认为你犯了一个错字,和你的数组不包含只是一个字符串,但有几个子元素。


你可以使用这种代码:

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


用下面的回调functon:

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

需要注意的是:

  • 第一个参数是PAS sed参考!
    • 这意味着修改它会修改相应的值数组中
  • 我使用===运营商比较


你会得到下面的输出:

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)