我想在不破坏结构的情况下清理数组。所以我想删除每个元素的值。问题是,数组有更多的维度。
[array]
[id] = "llll"
[innerArray]
[name] = "namenamename"
[name] = "kdkdfk"
[arryme]
[id] = 121212
[arraytarra] = "dd"
应该是
[array]
[id] = ""
[innerArray]
[name] = ""
[name] = ""
[arryme]
[id] = 0
[arraytarra] = ""
这是我的开始:
private function cleanArray($array) {
$return = $array;
foreach($array as $key => $value) {
if(is_Array($array[$key])) $this->cleanArray($array[$key]);
else $return[$key] = "";
}
}
最终版本,感谢bwoebi:
/****************
* cleanArray()
****************
* cleans an array: deletes the values but let the keys
*/
private function cleanArray($array) {
foreach($array as &$value) {
if(is_Array($value)) $value = $this->cleanArray($value);
else if(is_Int($value)) $value = 0;
else if(is_Bool($value)) $value = false;
else $value = "";
}
return $array;
}
private function cleanArray($array) {
foreach($array as &$value) {
if(is_Array($value))
$value = $this->cleanArray($value);
else
$value = "";
}
return $array;
}
您的开始几乎做到了(只需要小的修改(,但您不必复制数组。由于参数列表中没有引用运算符,因此数组将按值传递。
您也可以在foreach循环中通过引用简单地使用数组值。别忘了:将返回的数组保存到一个变量中。并返回您的最终数组。您不会返回任何内容,因为它的名称为$return
。
我认为答案应该是一个递归函数,它将每个值设置为null或一个null字符串。这里有一个递归函数的例子,它可以做一些不同的事情,但应该是一个不错的起点。
http://tecbrat.blogspot.com/2013/03/recursive-function-to-find-substrings.html
我认为您可以在数组内部循环,并在迭代的同时创建一个新数组,将密钥和值更新为NULL
$new_array = array();
foreach($array as $key => $data)
{
$new_array[$key] = NULL;
if(is_array($data))
{
foreach($data as $keys => $val)
{
$new_array[$key][$keys] = NULL;
}
}
}
var_dump($new_array);
这将输出
array (size=4)
'id' => null
'innerArray' =>
array (size=1)
'name' => null
'name' => null
'arryme' =>
array (size=2)
'id' => null
'arraytarra' => null
实时演示
这是我的代码。就性能而言,它不是最佳的,但作为代码艺术,它看起来很棒。
function cleanArray($a)
{
return is_array($a) ? array_map("cleanArray", $a) : "";
}
$b = array_map("cleanArray", $array);