PHP: 递归清空多维数组

3

让我们看以下多维数组示例:

$table=array(
"phone"=>array("value"=>"value 1", "message"=>"message 1"),
"email"=>array("value"=>"value 2", "message"=>"message 2"),
"passwd"=>array("value"=>"value 3", "message"=>"message 3")
);

print_r将显示:

Array ( [phone] => Array ( [value] => value 1 [message] => message 1 ) [email] => Array ( [value] => value 2 [message] => message 2 ) [passwd] => Array ( [value] => value 3 [message] => message 3 ) ) 

我需要一个函数,可以清空所有“value”和“message”键的值,这样print_r现在将显示:
Array ( [phone] => Array ( [value] => [message] => ) [email] => Array ( [value] => [message] => ) [passwd] => Array ( [value] => [message] => ) )

我尝试了以下内容:
function recursively_erase($table){
    foreach($table as $row=>$array)
        foreach($array as $key=>$value)
            $value="";
}

但是它并不起作用。有没有更好的想法?谢谢。

请使用引用foreach进行检查。您的内部循环将类似于foreach($array as $key=>&$value) $value="";请注意& - Josh J
2个回答

1

foreach会复制数组内容,所以您修改的是这些副本,然后在下一次迭代中被丢弃。

尝试

foreach($table as $row=>$array) {
   foreach($array as $key=>$value) {
       $table[$row][$key] = "";
       ^^^^^^^^^^^^^^^^^^
   }
}

所以您正在修改原始的顶级数组,而不是可丢弃的子数组/值。

感谢Marc B的回答。我尝试使用$table[$row][$key] = "",但数组没有改变。我不知道我可能错过了什么... - Rencontres Intenses
你还必须返回修改后的表格,因为你是在函数内完成所有操作的。 - Marc B

0

用递归方法在任意层级上清空多维数组的解决方案

如果你想要用递归方法清空一个多维数组:

$array = array(
'hi' => array(1, 2, 3),
'bye' => array(
    'exe' => array(1, 2, 3, 4)
)
);
    function recursive_empty($input) {
        if (is_array($input)) {
            //Check to see if array is associative, else just return blank array
            if ((bool)count(array_filter(array_keys($input), 'is_string'))) {
                foreach ($input as $key=>$val) {
                    $input[$key] = recursive_empty($val);
                }
            }
            else {
                return array();
            } 
        }
        return $input;
    }
print_r(recursive_empty($array));

对于任何层级的任何数组中的任何值,如果有与该键关联的数组,则会将其清空。这适用于任何深度,例如:

array(
'hi' => array(),
'bye' => array(
    1 => array(1, 2, 3)
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接