如何使用正则表达式从数组中删除数据?

时间:2012-02-08 18:12:47

标签: 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.jpg
    [4] => http://download.server.com/18821_ABS_132.jpg
    [5] => http://download.server.com/18821_SM_138.jpg
)

在这种情况下,我正在寻找内部有ABS的任何行。

我可以使用正则表达式http://.+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

3 个答案:

答案 0 :(得分:3)

array_filter()与自定义回调一起使用。

示例:

function testABS($elem) {
    return strpos($elem, 'ABS') === false;
}

print_r(array_filter($the_array, 'testABS'));

注意:这是一个人为的例子。您需要调整回调函数中的逻辑以满足您的需求。

答案 1 :(得分:1)

preg_grep

$abs = preg_grep('/ABS/', $your_array);

并将匹配作为数组返回。它还有一个标志,只返回不匹配的条目,这可能是你想要的:返回所有没有'abs'的条目。

答案 2 :(得分:1)

我理解的是你想要从数组中删除该元素。 可以这样做。

$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;