【问题标题】:Better way to unset multiple array elements取消设置多个数组元素的更好方法
【发布时间】:2011-10-25 05:19:05
【问题描述】:

这里的交易是我有一个包含 17 个元素的数组。我想获取一段时间内需要的元素并将它们从数组中永久删除。

代码如下:

$name = $post['name'];
$email = $post['email'];
$address = $post['address'];
$telephone = $post['telephone'];
$country = $post['country'];

unset($post['name']);
unset($post['email']);
unset($post['address']);
unset($post['telephone']);
unset($post['country']);

是的,代码很丑,不需要 bash。如何让这个看起来更好?

【问题讨论】:

    标签: php


    【解决方案1】:

    使用array_diff_key 删除

    $remove = ['telephone', 'country'];
    
    array_diff_key($post, array_flip($remove));
    

    如果您想提供要保留的键数组,可以使用array_intersect_key

    【讨论】:

    • 不明白为什么这种方法不被接受为成功的答案,因为它实际上是一种魅力!!
    • 太棒了!好一个。我喜欢这样,而不是循环遍历数组和取消设置元素。
    • 智能解决方案!!
    • 智能但对于大型输入数组很慢。对于大型输入数组和(至少)相对较少数量的要取消设置的键,foreach 取消设置似乎要快得多。
    【解决方案2】:

    看起来函数extract() 将是一个更好的工具来完成你正在尝试做的事情(假设它从数组中提取所有键/值并将它们分配给与本地键同名的变量范围)。提取内容后,您可以取消设置整个 $post,假设它不包含您想要的任何其他内容。

    但是,要真正回答您的问题,您可以创建一个要删除并循环遍历的键数组,显式取消设置它们...

    $removeKeys = array('name', 'email');
    
    foreach($removeKeys as $key) {
       unset($arr[$key]);
    }
    

    ...或者您可以将变量指向已删除键的新数组...

    $arr = array_diff_key($arr, array_flip($removeKeys));
    

    ...或将所有数组成员传递给unset()...

    unset($arr['name'],  $arr['email']);
    

    【讨论】:

    • array_diff_key() 是一个不错的解决方案。我想我会补充一点,你可以使用array_intersect_key() 来做相反的事情,只保留某些元素
    • 我支持 bbradley - array_diff_key 是很好的解决方案
    • 碰巧我只是在未设置 foreach 的情况下做这件事。然后我想可能有更好的解决方案。谷歌带我到这里。所以我尝试了array_diff_key,结果发现对于大型输入数组它比foreach慢得多(至少在要取消设置的键数量相对较少时)。
    【解决方案3】:

    还有一种比上面的例子更好的方法。 来源:http://php.net/manual/en/function.unset.php

    您可以像这样取消设置一次,而不是遍历整个数组并取消设置所有键:

    示例数组:

    $array = array("key1", "key2", "key3");
    

    对于整个数组:

    unset($array);
    

    对于唯一键:

    unset($array["key1"]);
    

    对于一个数组中的多个键:

    unset($array["key1"], $array["key2"], $array["key3"] ....) and so on.
    

    我希望这对你的发展有所帮助。

    【讨论】:

      【解决方案4】:

      我知道这个问题很老,但我认为最佳方法可能是这样做:

      $vars = array('name', 'email', 'address', 'phone'); /* needed variables */
      foreach ($vars as $var) {
          ${$var} = $_POST[$var]; /* create variable on-the-fly */
          unset($_POST[$var]); /* unset variable after use */
      }
      

      现在,您可以在任何地方使用 $name、$email、... ;)

      注意:extract() 不安全,所以完全没有问题!

      【讨论】:

      【解决方案5】:
      <?php
         $name = $post['name'];
         $email = $post['email'];
         $address = $post['address'];
         $telephone = $post['telephone'];
         $country = $post['country'];
      
      
      
         
         $myArray = array_except($post, ['name', 'email','address','telephone','country']);
         
        print_r($myArray);
        
        
         
        function array_except($array, $keys){
          foreach($keys as $key){
              unset($array[$key]);
          }
          return $array;
        }
      ?>
      

      【讨论】:

        猜你喜欢
        • 2016-04-30
        • 2011-11-02
        • 2018-07-16
        • 1970-01-01
        • 2014-09-21
        • 2015-01-18
        • 2012-04-18
        • 1970-01-01
        • 2019-02-20
        相关资源
        最近更新 更多