【问题标题】:search elements in array and remove from it php [duplicate]在数组中搜索元素并从中删除php [重复]
【发布时间】:2013-04-11 14:18:03
【问题描述】:

我有数组$days,如下所示:

$days= array ("Monday 1 April 2013","Tuesday 2 April 2013","Wednesday 3 April");

我会搜索它以删除从星期一和星期日开始的所有元素。

【问题讨论】:

  • 尝试使用array_search
  • 你试过什么?我们在这里不为你做。此外,您不应将日期存储为字符串;希望您没有这样做,这是某种用户输入。

标签: php arrays search


【解决方案1】:

试试这个:

for($i=0;$i<count($days);$i++) {
    $words = explode(' ',$days[$i]);
    if($words[0]==='Monday' || $words[0]==='Sunday') unset($days[$i]);    
}

【讨论】:

    【解决方案2】:
    $new_array=array();
    
    $days= array ("Monday 1 April 2013","Tuesday 2 April 2013","Wednesday 3 April");
    
    foreach($days as $key=>$val)
    {
    
    $words = explode(' ',$val);
        if($words[0]!='Monday' || $words[0]!='Sunday') 
    {
    
    $new_array[]=$val;
    
    }
    
    
    }    
    
    
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用preg_grep() 来获取匹配正则表达式的数组元素。要获得与该表达式匹配的元素,请将表达式设为negative lookahead (?!):

      $days = array ("Monday 1 April 2013", "Tuesday 2 April 2013", "Wednesday 3 April");
      $result = preg_grep('/^(?!Monday|Sunday)/', $days);
      print_r($result);
      

      结果

      Array
      (
          [1] => Tuesday 2 April 2013
          [2] => Wednesday 3 April
      )
      

      正则表达式^(?!Monday|Sunday) 的意思是“查找任何出现的^(主题字符串的开头)且后面没有“Monday”或“Sunday”。

      【讨论】:

      • 非常感谢...有办法在 preg_grep 之后诉诸并删除数组的空键吗?
      • @user1197284 你的意思是你想要像array (0 =&gt; 'Tuesday...', 1 =&gt; 'Wednesday...')这样的结果吗?您可以通过array_values($result) 实现此目的。
      【解决方案4】:
      $days = array_filter($days, function($el){
          return !(strpos($el, 'Monday') === 0 || strpos($el, 'Sunday') === 0);
      });
      

      Codepad Example

      【讨论】:

      • 我会将if (expression) return false; else return true; 替换为return !expression
      • @ax 我按照你说的编辑了。
      猜你喜欢
      • 2012-02-12
      • 1970-01-01
      • 1970-01-01
      • 2014-01-18
      • 1970-01-01
      • 2018-02-14
      • 2012-08-26
      • 2013-05-20
      相关资源
      最近更新 更多