清洁阵列而不破坏结构

时间:2013-06-04 13:28:07

标签: php arrays 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;

}

4 个答案:

答案 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

Live Demo

答案 3 :(得分:0)

这是我的代码。性能方面,它并不是最佳的,但作为代码艺术看起来很棒。

function cleanArray($a) 
{
    return is_array($a) ? array_map("cleanArray", $a) : "";
}
$b = array_map("cleanArray", $array);