从数组中删除符合特定字(PHP),其所有的字符串
我有一个字符串数组,并希望删除从阵列包含单词“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);
你试过
$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)
你可以使用原生的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]);
}
}
你可以做的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;
使用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;
});
(编辑:我误解了这个问题)
试试这个
<?php
foreach($tags as $key => $val)
{
if(!preg_grep("/(?!Free_Course).*/", $tags)) {
echo $val;
}
}
?>
$ cleanTags =和array_diff($标记,preg_grep( “/ Free_Course * /”,$标记));
在字符类列表,即“[^ A-ZA-Z0-9] +是指‘一个或多个字符,它们不是字母数字字符’。
的开始使用时,“^”只意味着否定如果在(perl)正则表达式的开头使用“^”,则意味着“跟随必须在行首”,因此“/^Free_Course * /”将匹配任何以“零”开头的字符串或更多“Free_Course”文本实例,这不是你想要的。
我会用Thierry Marianne的解决方案。
如果你想知道,“?我怎么否定词与正则表达式,然后”,看到这个线程:
Regular expression to match a line that doesn't contain a word?
''^在正则表达式模式的开始不是反转。这是“字符串的开始”锚。只有在字符类的开始时才是倒置的,例如, '[^ xyz]'(除x/y/z以外的任何内容)。你写的正则表达式只会简单地返回一个你想删除的东西 - 所有以'Free_Course'开头的条目。 – 2013-04-22 18:25:43
我不断收到此错误:stdClass类的对象无法转换为字符串..可能我的数组不是字符串,但对象?任何想法? – gray 2013-04-22 18:29:28
在将对象分配给另一个变量之前,您可以使用(数组)符号强制转换对象。 $ collection =(array)$ tag; – 2013-04-22 18:30:41