代码之家  ›  专栏  ›  技术社区  ›  jfoucher

删除数组中的所有值,同时保持键不变

  •  31
  • jfoucher  · 技术社区  · 15 年前

    我真的必须这样做才能重置数组吗??

    foreach ($array as $i => $value) {
        unset($array[$i]);
    }
    

    编辑:

    这一个更有意义,因为前一个相当于 $array=array();

    foreach ($array as $i => $value) {
        $array[$i]=NULL;
    }
    
    12 回复  |  直到 6 年前
        1
  •  11
  •   aefxx    7 年前

    定义此函数并在需要时调用它:

    function erase_val(&$myarr) {
        $myarr = array_map(create_function('$n', 'return null;'), $myarr);
    }
    
    // It's call by reference so you don't need to assign your array to a variable.
    // Just call the function upon it
    erase_val($array);
    

    这就是全部!

        2
  •  46
  •   RyanS    11 年前
    $keys = array_keys($array);
    $values = array_fill(0, count($keys), null);
    $new_array = array_combine($keys, $values);
    

    拿到钥匙

    获取具有相同数目元素的空值数组

    组合它们,使用键和键,以及空值作为值

    如注释所示,这对于使用 array_fill_keys

    $new_array = array_fill_keys(array_keys($array), null);
    
        3
  •  23
  •   cubaguest    12 年前

    用旧键和空值填充数组

    $array = array_fill_keys(array_keys($array), null)

        4
  •  9
  •   Gordon Haim Evgi    15 年前

    没有内置函数可以将数组重置为其键。

    另一种选择是通过回调和 array_map() :

    $array = array( 'a' => 'foo', 'b' => 'bar', 'c' => 'baz' );
    

    带常规回调函数

    function nullify() {}
    $array = array_map('nullify', $array);
    

    或者使用lambda和php<5.3

    $array = array_map(create_function('', ''), $array);
    

    或使用lambda(从php 5.3开始)

    $array = array_map(function() {}, $array);
    

    在所有情况下 var_dump($array); 输出:

    array(3) {
      ["a"]=> NULL
      ["b"]=> NULL
      ["c"]=> NULL
    }
    
        5
  •  2
  •   Armen Michaeli    8 年前
    foreach($a as &$v)
       $v = null;
    

    将数组项设置为空的原因是数组需要为每个键都有一个值,否则键就没有意义。这就是为什么它被称为键-它被用来访问一个值。在这里,空值似乎是一个合理的选择。

    用[可重复使用]过程包装:

    function array_purge_values(&$a)
    {
        foreach($a as &$v)
           $v = null;
    }
    

    请记住,虽然从5.3开始的PHP版本在默认情况下通过引用将值传递给函数,即函数声明中的和号前面的参数变量是多余的。 不仅如此,您还会得到一个警告,即该概念已被弃用。

        6
  •  1
  •   Emil Ivanov    15 年前

    我不太明白这个问题,但是你的例子

    foreach ($array as $i => $value) {
        unset($array[$i]);
    }
    

    相当于

    $array = array();
    
        7
  •  1
  •   qwerty_igor    10 年前

    如果需要使关联数组的值无效,可以遍历整个数组并进行回调,以将值设置为空,从而仍然具有键。

    array_walk($ar,function(&$item){$item = null;});
    

    如果您需要使整个数组无效,只需将其重新分配为空数组

    $ar = array();
    
        8
  •  0
  •   Sairam    15 年前

    unset将删除该键,您需要根据需要将该值设置为空或0。

    Example

        9
  •  0
  •   mr-sk    15 年前

    只要这样做:

    $arrayWithKeysOnly = array_keys($array);
    

    http://php.net/manual/en/function.array-keys.php

    编辑:寻址注释:

    好的,然后这样做:

    $arrayWithKeysProper = array_flip(array_keys($array));
    

    http://www.php.net/manual/en/function.array-flip.php

    编辑:事实上,考虑一下,这可能也行不通。

        10
  •  0
  •   dev-null-dweller    15 年前

    为什么不制作一个带有所需键的数组,并在需要重置它时将其变为变量?

    function resetMyArr(&$arr)
    {
     $arr = array('key1'=>null,'key2'=>null); 
    }
    
        11
  •  0
  •   NYCBilly    11 年前

    这是一个相当古老的主题,但是因为我在为更具体的结果提出自己的解决方案之前参考了它,所以我将与您分享这个解决方案。

    期望的结果是在保留键的同时使所有值都无效,并使其递归地搜索数组中的子数组。

    递归地将多级数组值设置为空:

    function nullifyArray(&$arrayData) {
    
      if (is_array($arrayData)) {
        foreach ($arrayData as $aKey => &$aValue) {
          if (is_array($aValue)) {
            nullifyArray($aValue);
          } else {
            $aValue = null;
          }
        }
        return true;     // $arrayData IS an array, and has been processed.
      } else {
        return false;    // $arrayData is NOT an array, no action(s) were performed.
      }
    
    }
    

    这是正在使用的,还有 以前 数组内容的输出。

    php代码创建多级数组,并调用nullyArray()函数:

    // Create a multi-level array.
    $testArray = array(
        'rootKey1'              =>  'rootValue1',
        'rootKey2'              =>  'rootValue2',
        'rootArray1'            =>  array(
            'subKey1'           =>  'subValue1',
            'subArray1'         =>  array(
                'subSubKey1'    =>  'subSubValue1',
                'subSubKey2'    =>  'subSubValue2'
            )
        )
    );
    
    // Nullify the values.
    nullifyArray($testArray); 
    

    在调用NullyArray()之前:

    Array
    (
        [rootKey1] => rootValue1
        [rootKey2] => rootValue2
        [rootArray1] => Array
            (
                [subKey1] => subValue1
                [subArray1] => Array
                    (
                        [subSubKey1] => subSubValue1
                        [subSubKey2] => subSubValue2
                    )
    
            )
    
    )
    

    调用nullyArray()后:

    Array
    (
        [rootKey1] => 
        [rootKey2] => 
        [rootArray1] => Array
            (
                [subKey1] => 
                [subArray1] => Array
                    (
                        [subSubKey1] => 
                        [subSubKey2] => 
                    )
    
            )
    
    )
    

    我希望它能帮助某人/任何人,并感谢所有以前回答过这个问题的人。

        12
  •  0
  •   Darren Murphy    6 年前

    翻转数组以获取键,然后将所有键的值设为空:

    array_fill_keys(array_flip($array), NULL);
    

    关于array_fill_keys():

    函数的作用是:用值填充数组,指定 钥匙。

    关于array_flip():

    函数的作用是:翻转/交换所有键 数组中的关联值。

    推荐文章