2013-04-11 38 views
-2

我有这样下面的阵列$days搜索元素,并删除它从PHP的

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

我会通过搜索它来删除所有与周一和周日开始元素。

+0

尝试使用['array_search'](http://php.net/manual/en/function.array-search.php)。 – jdepypere 2013-04-11 14:20:33

+1

你试过了什么?我们不会在这里为你做。另外,你不应该把日期存储为字符串;希望你没有这样做,这是某种用户输入。 – 2013-04-11 14:20:45

回答

0

您可以使用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)意味着“找到^任何发生(开始主题字符串)后面跟着“星期一”或“星期天”。

+0

非常感谢...有一种方法可以在preg_grep之后度假并删除数组的空键? – user1197284 2013-04-11 15:05:43

+0

@ user1197284你的意思是你想要一个类似'array(0 =>'Tuesday ...',1 =>'Wednesday ...')'的结果吗?你可以用'array_values($ result)'实现这一点。 – 2013-04-11 15:28:12

0
$days = array_filter($days, function($el){ 
    return !(strpos($el, 'Monday') === 0 || strpos($el, 'Sunday') === 0); 
}); 

Codepad Example

+0

我会替换'如果(表达式)返回false;否则返回true;''return'expression'。 – 2013-04-11 16:20:09

+0

@ax我按照你的说法编辑它。 – Paulpro 2013-04-11 16:29:56

0

尝试这种情况:

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

} 


}  


}