[英]Cleaning Array without destroying structure
我想在不破壞結構的情況下清理陣列。 所以我想刪除每個元素的值。 問題是,數組具有更大的尺寸。
[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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.