Php 如何使用regexp从数组中删除数据?
我有这个数组,Php 如何使用regexp从数组中删除数据?,php,regex,arrays,Php,Regex,Arrays,我有这个数组,$array: Array ( [0] => http://download.server.com/18821_SM_139.jpg [1] => http://download.server.com/18821_SM_134.jpg [2] => http://download.server.com/18821_SM_138.jpg [3] => http://download.server.com/18821_SM_138
$array
:
Array
(
[0] => http://download.server.com/18821_SM_139.jpg
[1] => http://download.server.com/18821_SM_134.jpg
[2] => http://download.server.com/18821_SM_138.jpg
[3] => http://download.server.com/18821_SM_138.jpg
[4] => http://download.server.com/18821_ABS_132.jpg
[5] => http://download.server.com/18821_SM_138.jpg
)
在本例中,我要查找任何内部有ABS
的行
我可以通过使用regexphttp://.+ABS.+
查找,这将选择整行
但我仍然需要将其从阵列中移除,而不仅仅是替换它(或将其保留为空)。在这种情况下,阵列将变为:
Array
(
[0] => http://download.server.com/18821_SM_139.jpg
[1] => http://download.server.com/18821_SM_134.jpg
[2] => http://download.server.com/18821_SM_138.jpg
[3] => http://download.server.com/18821_SM_138.jpg
[4] => http://download.server.com/18821_SM_138.jpg
)
你知道我需要用什么方法吗
谢谢
编辑:
我正在使用OOP php与自定义回调一起使用
例如:
function testABS($elem) {
return strpos($elem, 'ABS') === false;
}
print_r(array_filter($the_array, 'testABS'));
注意:这是一个人为的例子。您需要调整回调函数中的逻辑以满足您的需要。与自定义回调一起使用
例如:
function testABS($elem) {
return strpos($elem, 'ABS') === false;
}
print_r(array_filter($the_array, 'testABS'));
注意:这是一个人为的例子。您需要调整回调函数中的逻辑以满足您的需要。有:
并将匹配项作为数组返回。它还有一个只返回不匹配项的标志,这可能是您想要的:返回所有没有“abs”的项。有:
并将匹配项作为数组返回。它还有一个只返回不匹配项的标志,这可能是您想要的:返回所有不包含“abs”的项。我理解的是您想要从数组中删除该元素。 我可以这样做
$arr = Array
(
[0] => http://download.server.com/18821_SM_139.jpg
[1] => http://download.server.com/18821_SM_134.jpg
[2] => http://download.server.com/18821_SM_138.jpg
[3] => http://download.server.com/18821_SM_138.jpg
[4] => http://download.server.com/18821_ABS_132.jpg
[5] => http://download.server.com/18821_SM_138.jpg
);
$new_arr = array();
foreach($arr as $link){
if(!preg_match('ABS', $link)){
$new_arr[] = $link;
}
}
//ths will give array with only 4 elements as '18821_ABS_132.jpg' will be removed
return $new_arr;
我的理解是,你想从数组中删除该元素。 我可以这样做
$arr = Array
(
[0] => http://download.server.com/18821_SM_139.jpg
[1] => http://download.server.com/18821_SM_134.jpg
[2] => http://download.server.com/18821_SM_138.jpg
[3] => http://download.server.com/18821_SM_138.jpg
[4] => http://download.server.com/18821_ABS_132.jpg
[5] => http://download.server.com/18821_SM_138.jpg
);
$new_arr = array();
foreach($arr as $link){
if(!preg_match('ABS', $link)){
$new_arr[] = $link;
}
}
//ths will give array with only 4 elements as '18821_ABS_132.jpg' will be removed
return $new_arr;
在这种情况下,Strpos比使用preg_match更好,因为它更快。阅读
array\u filter()
。我试过这个例子,但不起作用:public function hasABC($elem){return strpos('ABC',$elem)!==false;}
然后$the\u array=array\u filter($the\u array,$this->hasABC($the\u array))代码>也是OOP透视图'testABS'
不是一个好的回调。如果您没有提到OOP,那么数组过滤器()
会接受回调。另请参阅代码更新。在本例中,Strpos比使用preg_match更好,因为它更快。索引处的元素。阅读array\u filter()
。我试过这个例子,但不起作用:public function hasABC($elem){return strpos('ABC',$elem)!==false;}
然后$the\u array=array\u filter($the\u array,$this->hasABC($the\u array))代码>也是OOP透视图'testABS'
不是一个好的回调。如果您没有提到OOP,那么数组过滤器()
会接受回调。另请参阅代码更新。这将返回包含ABS
的精确行,我需要不包含该行的数组line@Patrioticcow在投诉之前,您应该阅读答案和手册。此返回包含ABS
的确切行,我需要没有这个的数组line@Patrioticcow在抱怨之前,你应该阅读答案和手册