簡體   English   中英

清潔陣列而不破壞結構

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM