【问题标题】:Unset array element based on first character基于第一个字符取消设置数组元素
【发布时间】:2011-09-07 07:10:16
【问题描述】:

如果第一个字符是某个字母(在本例中为字母 D),我试图找到一种方法来取消设置元素...一个 preg 替换就可以了?

[0] => Aaron [1] => Bob [2] => Carl [3] => Dale [4] => Devin [5] => Dylan

取消所有以字母“D”开头的单词会导致:

[0] => Aaron [1] => Bob [2] => Carl

【问题讨论】:

  • 你使用的是什么版本的 PHP?
  • 酷,你可以使用闭包了

标签: php arrays unset


【解决方案1】:

手动循环已经完成了任务。但作为单线选项:

 $array = preg_grep('/^(?!D)/', $array);

【讨论】:

    【解决方案2】:

    您可以使用array_filter 函数:

    function filter_firstchar($var){
        return $var[0] != 'D';
    }
    
    $result = array_filter($arr, 'filter_firstchar');
    

    如果您要过滤的字母发生变化,您可以构建一个非常基本的过滤类:

    class Filter_FirstChar {
        private $char;
        function __construct($char){
            $this->char = $char;
        }
        function filter($var){
            return $var[0] != $this->char;
        }
    }
    
    $result = array_filter($arr, array(new Filter_FirstChar('A'), 'filter'));
    

    【讨论】:

    • 你需要使用!="如果回调函数返回true,则将输入的当前值返回到结果数组中"
    • @GWW:好电话!我读得太快了,以为他想保留以“D”开头的条目。我的错。
    • 我得到了意外的 T_STRING,期望在​​课程的第 2 行出现 T_FUNCTION?
    【解决方案3】:
    $i = 0;
    $n = count($array);
    while ($i < $n) {
      if ($array[$i][0] == 'D')
        unset($array[$i]);
      ++$i;
    }
    

    【讨论】:

      【解决方案4】:
      foreach($array as $key => $name)
      {
          if(substr($name,0,1) == "D")
          {
              unset($array[$key]);
          }
      }
      

      是一种适合您的方法。

      【讨论】:

        猜你喜欢
        • 2018-05-10
        • 1970-01-01
        • 2017-09-15
        • 2019-03-26
        • 2011-11-02
        • 2013-06-21
        • 2016-12-25
        • 2021-04-07
        • 2016-04-30
        相关资源
        最近更新 更多