Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在不破坏结构的情况下清洗阵列_Php_Arrays_Structure - Fatal编程技术网

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);