Php 在不破坏结构的情况下清洗阵列
我希望在不破坏结构的情况下清理阵列。所以我想删除每个元素的值。问题是,数组的维数更多Php 在不破坏结构的情况下清洗阵列,php,arrays,structure,Php,Arrays,Structure,我希望在不破坏结构的情况下清理阵列。所以我想删除每个元素的值。问题是,数组的维数更多 [array] [id] = "llll" [innerArray] [name] = "namenamename" [name] = "kdkdfk" [arryme] [id] = 121212 [arraytarra] = "dd" 应该是 [array] [id] = "" [innerArray] [name] =
[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;
}
我认为答案应该是一个递归函数,它将每个值设置为null或null字符串。这里有一个递归函数的例子,它做了一些不同的事情,但应该是一个不错的起点
我认为您可以在数组中循环并创建一个新数组,同时迭代、保留键并将值更新为
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
您的开始几乎可以做到这一点(只需要进行小的修改),但您不必复制阵列。由于参数列表中没有引用运算符,数组将按值传递
您还可以在foreach循环中通过引用简单地使用数组值。不要忘记:将返回的数组保存到变量中。并返回您的最终数组。您不返回任何内容,因为它名为
$return
这是我的代码。从性能上看,它不是最优的,但作为一种代码艺术,它看起来很棒
function cleanArray($a)
{
return is_array($a) ? array_map("cleanArray", $a) : "";
}
$b = array_map("cleanArray", $array);
您可以使用[array][innerArray][name]=“当然我知道:”)访问多维值,但我无法为此编写脚本。我在顶部添加了我的开始。太好了,谢谢!我现在在电脑上的时间太长了,所以我没有看到最后一个简单的步骤。我扩展了您的版本,所以我不松开值的类型信息。@ DavidPauli。如果这个答案解决了您的问题,请考虑点击和接受它,点击大的绿色刻度标记。✔) 在答案的分数下。@bwoebi谢谢,我还不知道。我是stackoverflow的新手。
function cleanArray($a)
{
return is_array($a) ? array_map("cleanArray", $a) : "";
}
$b = array_map("cleanArray", $array);