让我们采用以下多维数组示例:
$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 ) )
我需要一个能清空所有"值"和"消息"键,以便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="";
}
但它没有用。有人有更好的主意吗?
由于
答案 0 :(得分:1)
foreach
生成数组内容的COPIES,因此您正在修改这些副本,然后在下一次迭代时抛弃它们。
尝试
foreach($table as $row=>$array) {
foreach($array as $key=>$value) {
$table[$row][$key] = "";
^^^^^^^^^^^^^^^^^^
}
}
所以你要修改原始的顶级数组,而不是一次性子数组/值。
答案 1 :(得分: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)
)