我希望在不破坏结构的情况下清理阵列。所以我想删除每个元素的值。问题是,数组有更多的维度。
[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;
}
答案 0 :(得分:1)
private function cleanArray($array) {
foreach($array as &$value) {
if(is_Array($value))
$value = $this->cleanArray($value);
else
$value = "";
}
return $array;
}
你的开始差不多了(只需要很小的修改),但你不必复制数组。由于参数列表中没有引用运算符,因此数组将按值传递。
您也可以在foreach循环中通过引用简单地使用数组值。不要忘记:将返回的数组保存到变量中。并返回你的最终阵列。您没有返回任何内容,因为它的名称为$return
。
答案 1 :(得分:0)
我认为答案是递归函数,设置每个值null或空字符串。这是一个递归函数的例子,它做了不同的事情,但对你来说应该是一个不错的起点。
http://tecbrat.blogspot.com/2013/03/recursive-function-to-find-substrings.html
答案 2 :(得分:0)
我认为您可以循环访问数组并在迭代时创建一个新数组,保留键并将值更新为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
答案 3 :(得分:0)
这是我的代码。性能方面,它并不是最佳的,但作为代码艺术看起来很棒。
function cleanArray($a)
{
return is_array($a) ? array_map("cleanArray", $a) : "";
}
$b = array_map("cleanArray", $array);