【问题标题】:How to delete elements in array?如何删除数组中的元素?
【发布时间】:2012-03-29 00:27:52
【问题描述】:

我有一个这样的数组:

array() {
  ["AG12345"]=>
  array() { 

  }
  ["AG12548"]=>
  array() { 

  }
  ["VP123"]=>
  array() { 

  }

我只需要保留键以“VP”开头的数组

一个函数就可以做到吗?

【问题讨论】:

标签: php arrays


【解决方案1】:

是的,只需使用unset()

foreach ($array as $key=>$value)
{
  if(substr($key,0,2)!=="VP")
  {
    unset($array[$key]);
  }
}

【讨论】:

  • +1,但我会使用substr() 而不是正则表达式。它更简单、更快捷。
  • 为什么是“!”在第 3 行吗?
  • @crunkchitis - 条件substr($key,0,2)!=="VP" 检查由字符串$key 的前两个字符组成的子字符串是否与字符串"VP" 相同。换句话说,! 代表否定。
  • @JackManey - 我是 php 新手,所以我不知道“!==”存在,我只知道“!=”。事实证明,这对我的工作很重要。相同与相等。谢谢。
【解决方案2】:

来自上一个问题:How to delete object from array inside foreach loop?

foreach($array as $elementKey => $element) {
    if(strpos($elementKey, "VP") == 0){
        //delete this particular object from the $array
        unset($array[$elementKey]);
    } 
}

【讨论】:

    【解决方案3】:

    这对我有用:

    $prefix = 'VP';
    for ($i=0; $i <= count($arr); $i++) {
       if (strpos($arr[$i], $prefix) !== 0)
          unset($arr[$i]);
    }
    

    【讨论】:

    • 这很公平,毕竟你是 OP :) 但对我来说 substr 函数还需要另一个函数调用,即 strlen 来获取前缀的长度。
    【解决方案4】:

    另一种选择(如果它是值,这将更简单):

    array_intersect_key($arr, array_flip(preg_grep('~^VP~', array_keys($arr))));
    

    【讨论】:

      【解决方案5】:

      这只是一个示例,您可能还有很多其他方法!

      // sample array
      $alpha = array("AG12345"=>"AG12345", "VP12548"=>"VP12548");
      foreach($alpha as $val) 
      {
          $arr2 = str_split($val, 2);
          if ($arr2[0] == "VP")
              $new_array = array($arr2[0]=>"your_values");
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-03
        • 2016-10-21
        • 2018-10-14
        • 2013-06-02
        相关资源
        最近更新 更多