2012-02-08 4 views
0

У меня есть этот массив, $array:Как удалить данные из массива с помощью regexp?

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 внутри.

Я мог бы найти это, используя regexp 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 
) 

Любые идеи, какой метод мне нужно использовать?

Спасибо.

редактировать:

Я использую ООП PHP

ответ

3

Использование array_filter() с обратным вызовом.

Пример:

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

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

Примечание: Это надуманный пример. Вам необходимо будет настроить логику в функции обратного вызова в соответствии с вашими потребностями.

+1

Strpos будет лучше, чем использование preg_match в этом случае, поскольку это быстрее. – jakx

+0

что такое '$ elem' – Patrioticcow

+0

* элемент * по индексу. Читайте на 'array_filter()'. –

1

Там в preg_grep:

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

и возвращает спички в виде массива. Он также имеет флаг для возврата только несоответствующих записей, что, вероятно, вам нужно: вернуть все записи, которые НЕ имеют в них «abs».

+0

это возвращает ту точную строку, которая содержит 'ABS', мне нужен массив без этой строки – Patrioticcow

+2

@Patrioticcow вы должны ** читать ** ответ и руководство перед жалобой – Sorin

+0

нет жалобы, просто уведомление. – Patrioticcow

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; 
Смежные вопросы