【问题标题】:How can I remove a key and its value from an associative array?如何从关联数组中删除键及其值?
【发布时间】:2011-03-04 11:15:45
【问题描述】:

给定一个关联数组:

array("key1" => "value1", "key2" => "value2", ...)

在给定键的情况下,我将如何删除某个键值对?

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    你可以使用unset:

    unset($array['key-here']);
    

    示例:

    $array = array("key1" => "value1", "key2" => "value2");
    print_r($array);
    
    unset($array['key1']);
    print_r($array);
    
    unset($array['key2']);
    print_r($array);
    

    输出:

    Array
    (
        [key1] => value1
        [key2] => value2
    )
    Array
    (
        [key2] => value2
    )
    Array
    (
    )
    

    【讨论】:

    • +1:感谢您的帮助。这里是 PHP 新手,但值得注意的是,如果您尝试在 foreach 循环内执行这些编辑,则需要在枚举变量前面添加一个 & 以允许写入访问。
    • 这里是一个解决方案的链接,该链接说明了@FreeAsInBeer link 关于与符号的评论。
    • 这是对原始数组的破坏吗?是否有一种干净的函数范式方法可以生成一个没有值的全新数组?
    【解决方案2】:

    使用unset():

    unset($array['key1']);
    

    【讨论】:

      【解决方案3】:

      使用unset

      unset($array['key1'])
      

      【讨论】:

        【解决方案4】:

        您可能需要两个或更多循环,具体取决于您的阵列:

        $arr[$key1][$key2][$key3]=$value1; // ....etc
        
        foreach ($arr as $key1 => $values) {
          foreach ($key1 as $key2 => $value) {
          unset($arr[$key1][$key2]);
          }
        }
        

        【讨论】:

        • foreach ($key1 似乎是错误的。你的意思是foreach ($values
        【解决方案5】:

        使用此函数可以在不修改原始数组的情况下删除特定的键数组:

        function array_except($array, $keys) {
          return array_diff_key($array, array_flip((array) $keys));   
        } 
        

        第一个参数传递所有数组,第二个参数设置要删除的键数组。

        例如:

        $array = [
            'color' => 'red', 
            'age' => '130', 
            'fixed' => true
        ];
        $output = array_except($array, ['color', 'fixed']);
        // $output now contains ['age' => '130']
        

        【讨论】:

        • 您需要关闭$output = array_except($array_1, ['color', 'fixed']);上的报价
        • 加一!实用!
        • 我需要反向功能,有内置功能吗? php function array_extract($array, $keys) { return array_intersect_key($array, array_flip((array) $keys)); } $output = array_extract($array, ['color', 'fixed']); print_r($output); //Array ( [color] => red [fixed] => 1 );
        【解决方案6】:

        考虑这个数组:

        $arr = array("key1" => "value1", "key2" => "value2", "key3" => "value3", "key4" => "value4");
        
        • 使用数组key移除元素:

          // To unset an element from array using Key:
          unset($arr["key2"]);
          var_dump($arr);
          // output: array(3) { ["key1"]=> string(6) "value1" ["key3"]=> string(6) "value3" ["key4"]=> string(6) "value4" }
          
        • 通过value删除元素:

          // remove an element by value:
          $arr = array_diff($arr, ["value1"]);
          var_dump($arr);
          // output: array(2) { ["key3"]=> string(6) "value3" ["key4"]=> string(6) "value4" } 
          

        阅读有关 array_diff 的更多信息:http://php.net/manual/en/function.array-diff.php

        • 使用index删除元素:

          array_splice($arr, 1, 1);
          var_dump($arr);
          // array(1) { ["key3"]=> string(6) "value3" } 
          

        阅读有关 array_splice 的更多信息:http://php.net/manual/en/function.array-splice.php

        【讨论】:

          【解决方案7】:

          你可以使用 Laravel helpers:

          第一个助手,方法Arr::except

          $array = ['name' => 'Desk', 'price' => 100];
          
          $filtered = Arr::except($array, ['price']);
          
          // ['name' => 'Desk']
          

          第二个助手:方法Arr::pull

          $array = ['name' => 'Desk', 'price' => 100];
          
          $name = Arr::pull($array, 'name');
          
          // $name: Desk
          
          // $array: ['price' => 100]
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-11-07
            • 2016-03-11
            • 2018-09-16
            • 2021-02-06
            • 2010-12-17
            • 2010-09-19
            • 2018-05-16
            • 1970-01-01
            相关资源
            最近更新 更多