我有一个字符串数组,并希望从数组中删除包含“Free_Course”一词的所有元素
数组包含“Free_Course_123”,“Free_Course_124”,“Other_Course_123”,Other_Course_1234等字符串。
我只想循环遍历数组,并删除所有包含“Free_Course”的内容,这样就可以摆脱上面列出的前两个元素。
我尝试过使用这个preg_grep函数,但到目前为止还没有成功:
$cleanTags= preg_grep("/^Free_Course*/", $tags);
答案 0 :(得分:3)
您可以使用本机PHP函数 strpos (http://php.net/manual/fr/function.strpos.php)来识别数组中应删除的值:
<?php
foreach ($tags as $index => $tag) {
if (strpos($tag, 'Free_Course') !== false) {
unset($tags[$index]);
}
}
答案 1 :(得分: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;
答案 2 :(得分:1)
试试这个
<?php
foreach( $tags as $key => $val )
{
if( !preg_grep( "/(?!Free_Course).*/", $tags ) ) {
echo $val;
}
}
?>
答案 3 :(得分: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 )
答案 4 :(得分: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;
});
(编辑:我误解了这个问题)
答案 5 :(得分:0)
您可以使用 array_filter 。 请参阅以下链接:
答案 6 :(得分:0)
$ cleanTags = array_diff($ tags,preg_grep(“/ Free_Course。* /”,$ tags));
答案 7 :(得分:0)
“^”仅表示在字符类列表的开头使用时的否定,即“[^ a-zA-Z0-9] +表示”一个或多个不是字母数字字符的字符“。
如果在(perl)正则表达式的开头使用“^”,则表示“跟随必须位于行的开头”。因此,“/ ^ Free_Course * /”将匹配任何以“Free_Course'文本的零个或多个实例”开头的字符串,这不是您想要的。
我会使用Thierry Marianne的解决方案。
如果你想知道,“我怎么用正则表达式否定一个单词?”,请看这个主题:
Regular expression to match a line that doesn't contain a word?