2013-04-22 54 views
1

我有一个字符串数组,并希望删除从阵列包含单词“Free_Course”从数组中删除符合特定字(PHP),其所有的字符串

数组中存放字符串,例如所有元素“Free_Course_123”,“Free_Course_124”,“Other_Course_123”,Other_Course_1234等等。

我只是想遍历数组,并删除所有包含“Free_Course”,所以这将摆脱上面列出的前2个元素。

我已经使用这个preg_grep功能可按尝试过,但没有成功作为尚未:

$cleanTags= preg_grep("/^Free_Course*/", $tags); 
+1

''^在正则表达式模式的开始不是反转。这是“字符串的开始”锚。只有在字符类的开始时才是倒置的,例如, '[^ xyz]'(除x/y/z以外的任何内容)。你写的正则表达式只会简单地返回一个你想删除的东西 - 所有以'Free_Course'开头的条目。 – 2013-04-22 18:25:43

+0

我不断收到此错误:stdClass类的对象无法转换为字符串..可能我的数组不是字符串,但对象?任何想法? – gray 2013-04-22 18:29:28

+0

在将对象分配给另一个变量之前,您可以使用(数组)符号强制转换对象。 $ collection =(array)$ tag; – 2013-04-22 18:30:41

回答

0

你试过

$tags = array(
    "Free_Course_123", 
    "Free_Course_124", 
    "Other_Course_123", 
    "Other_Course_1234" 
); 
$cleanTags= preg_grep("/Free_Course/", $tags, PREG_GREP_INVERT); 
print_r($cleanTags); 

?最后一个属性反转过滤功能,见the manual

我已经测试的结果,它应该工作,因为PHP 4.2.0

Array ([2] => Other_Course_123 [3] => Other_Course_1234) 
+0

我不断收到此错误:stdClass类的对象无法转换为字符串..可能我的数组不是字符串,但对象?我对此很感兴趣,虽然 – gray 2013-04-22 18:27:05

+0

@gray:不能 - 请参阅我的更新回答 – 2013-04-22 18:34:44

+0

感谢它现在为我工作 – gray 2013-04-22 18:34:58

3

你可以使用原生的PHP函数strposhttp://php.net/manual/fr/function.strpos.php)来确定您的阵列应该是值删除:

<?php 

foreach ($tags as $index => $tag) { 
     if (strpos($tag, 'Free_Course') !== false) { 
      unset($tags[$index]); 
     } 
} 
1

你可以做的preg_match,只返回那些不匹配。

foreach($array as $key => $value) 
    if(!preg_match("/Free_Course/i", $value)) 
     echo $value . '<br>'; 

或者要创建一个新的数组...

foreach($array as $key => $value) 
    if(!preg_match("/Free_Course/i", $value)) 
     $new_array[] = $value; 
0

使用array_walk:

$arr = array(
    "Free_Course_123", 
    "Free_Course_124", 
    "Other_Course_123", 
    "Other_Course_1234" 
); 

$arr = array_filter($arr, function($e){ 
    return strpos($e, 'Free_Course') === false; 
}); 

(编辑:我误解了这个问题)

1

试试这个

<?php 
foreach($tags as $key => $val) 
{ 
    if(!preg_grep("/(?!Free_Course).*/", $tags)) { 
     echo $val; 
    } 
} 
?> 
0

$ cleanTags =和array_diff($标记,preg_grep( “/ Free_Course * /”,$标记));

0

在字符类列表,即“[^ A-ZA-Z0-9] +是指‘一个或多个字符,它们不是字母数字字符’。

的开始使用时,“^”只意味着否定

如果在(perl)正则表达式的开头使用“^”,则意味着“跟随必须在行首”,因此“/^Free_Course * /”将匹配任何以“零”开头的字符串或更多“Free_Course”文本实例,这不是你想要的。

我会用Thierry Marianne的解决方案。

如果你想知道,“?我怎么否定词与正则表达式,然后”,看到这个线程:

Regular expression to match a line that doesn't contain a word?

相关问题