оптимальная работа с исключением в foreach

Demona

Новичок
оптимальная работа с исключением в foreach

Суть задачи: есть 2 массивы, нужно проверить каждую строку первого массивы, не попадается ли нее какая-либо сточка из второго массива. Если совпадения нет - строка переносится в другой массив (при этом строка из второго массива может быть только частью строки из первого, так что in_array не поможет).

PHP:
		foreach ($array1 as $ar) {
			$uniq=True
			foreach ($exclude as $exl) {
				if (strstr($ar, $exl) !== FALSE) {
			        $uniq=False
				}
			}
			if  $uniq==True {$result[] = array($ar);}
		
		}
Есть ли какой-то более "правильный" способ для такой операции (работаю с PHP5 если это важно)?
(стараюсь совершенствовать, и мне кажется что можно еще что-то здесь сделать)
 

Gas

может по одной?
PHP:
$ex_str = implode('достаточно_нетипичный_разделитель', $exclude);
foreach ($array1 as $ar) { 
  if (FALSE !== strstr($ar, $ex_str)) $result[] = array($ar);
}
а твой алгоритм я бы переписал хотя бы так:

PHP:
foreach ($array1 as $ar) { 
  foreach ($exclude as $exl) { 
     if (FALSE !== strstr($ar, $exl)) { 
        $result[] = array($ar); 
        break;
     } 
  }          
}
 

Demona

Новичок
Автор оригинала: Gas
PHP:
$ex_str = implode('достаточно_нетипичный_разделитель', $exclude);
foreach ($array1 as $ar) { 
  if (FALSE !== strstr($ar, $ex_str)) $result[] = array($ar);
}
На сколько я понимаю из задумки, данный способ будет работать в том случае, если строки по идеи должны совпасть 1:1? Но у меня строка из второго массивам(именно второго) может быть только частью первого. Поэтому такой способ не работает.
 

Gas

может по одной?
строка из второго массивам(именно второго) может быть только частью первого
а, думал наоборот, тогда пользуй свою доработанную версию, ничего страшного в этом коде нет (если у тебя не тысячи элементов в массивах).
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
[m]array_diff[/m]
[m]array_intersect[/m]
?
 

Gas

может по одной?
не, тут надо сравнивать значения не один к одному, а вхождение части одного значения в другое. Наверное можно взять [m]array_udiff[/m] (чтоб callback был), но кода меньше не будет, да и быстрее врят-ли.
 

Lews

Новичок
Перед тем как задумываться, оптимальная там работа или не отпимальная, надо понять, сильно ли важно, выполнится данный участок за 0.000001с или за 0.0000015с.
 

Gas

может по одной?
Lews
вопрос был не про оптимальность скорости, а про подход к решению.
 
Сверху