Сравните два массива и разницу эха

Что не так с этим кодом? Я пробовал использовать array_udiff без каких-либо успехов.

<!--?php
#I want to echo values of $paths1 that do not appear (even partially) on $paths2.

$paths1 = array('one', 'two', 'three');
$paths2 = array('twenty one', 'twenty two');

foreach ($paths1 as $path1)
 {
 foreach ($paths2 as $path2)
 {
 if (stripos($path1, $path2) == False)
 {
 echo $path1 . "<br-->";
 break;
 }
 }
 echo "";
 }
?>
2 ответа

  1. Вам нужно использовать stripos() === false, как если бы они совпадали с возвратом 0 который равен == false.

  2. У вас смешанные параметры, это должны быть stripos($path2, $path1).

  3. Вы должны проверить все значения в $paths2 до $paths2 пор, пока не найдете тот, в котором он находится. Вы говорите это не в каких-либо $paths2 после первого, в котором вы его не нашли. Установите флаг $flag = true; между петлями foreach(). Вместо эха внутри второго foreach просто установите $flag == false если stripos($path2, $path1) !== false. После окончания второго цикла, но до первого, выведите, если $flag == false.

т.е.

foreach ($paths1 as $path1)
{
 $flag = true;
 foreach ($paths2 as $path2)
 {
 if (stripos($path2, $path1) !== false)
 {
 $flag = false;
 break;
 }
 }
 if($flag)
 echo $path1;
}

Примечание: не проверял, но должен работать.


Аргументы к stripos назад. Вместо:

if (stripos($path1, $path2) == False)

Вы хотите:

if (stripos($path2, $path1) === false)

licensed under cc by-sa 3.0 with attribution.