Я использую этот скрипт для поиска совпадающих и несогласованных элементов массива.
Мой код.
$filter1 = "red,green,blue,yellow"; $parts1 = explode(',', $filter1); $filter2 = "red,green,blue"; $parts2 = explode(',', $filter2); for($i=0; $i< count($parts1); $i++) { for($j=0; $j< count($parts2); $j++) { if($parts1[$i] == $parts2[$j]) { $match[] = $parts1[$i]; } else { $nomatch[] = $parts1[$i]; } } } print_r($match); echo "<br>"; print_r($nomatch);
Используя этот код, я получаю только совпадающие элементы и не несовпадаю. Может кто-нибудь помочь. Заранее спасибо.
Вы можете попробовать использовать array_intersect
и array_diff
$filter1 = "red,green,blue,yellow"; $parts1 = explode(',', $filter1); $filter2 = "red,green,blue"; $parts2 = explode(',', $filter2); $match = array_intersect($parts1, $parts2); $nomatch = array_diff($parts1, $parts2); var_dump($match,$nomatch);
Вывод
array 0 => string 'red' (length=3) 1 => string 'green' (length=5) 2 => string 'blue' (length=4) array 3 => string 'yellow' (length=6)
это можно сделать с помощью array_intersect и array_diff
$filter1 = "red,green,blue,yellow"; $parts1 = explode(',', $filter1); $filter2 = "red,green,blue"; $parts2 = explode(',', $filter2); $result = array_intersect($parts1 , $parts2 ); print_r($result);
Живой пример
а также
$result = array_diff($parts1 , $parts2 ); print_r($result);
Пример LIVE
потому что ваш вложенный цикл не запускается в желтый цвет, попробуйте это
$filter1 = "red,green,blue,yellow"; $filter2 = "red,green,blue,gray";
или
for($j=0; $j<= count($parts2); $j++)
$filter1 = "red,green,blue,yellow"; $parts1 = explode(',', $filter1); $filter2 = "red,green,blue"; $parts2 = explode(',', $filter2); $match = array(); $nomatch = array(); foreach($parts1 as $v){ if(in_array($v,$parts2)) $match[]=$v; else $nomatch[]=$v; }
попробуй это
$filter1 = "red,green,blue,yellow"; $parts1 = explode(',', $filter1); $filter2 = "red,green,blue"; $parts2 = explode(',', $filter2); foreach($parts1 as $first) { if(in_array($first, $parts2)) { $match[] = $first; } else { $nomatch[] = $first; } } print_r($match); echo "<br>"; print_r($nomatch);
или вы можете использовать array_diff для получения несопоставимых элементов
print_r(array_diff($parts1,$parts2));
и для совпадающих элементов
print_r(array_intersect($parts1,$parts2));
Попробуйте приведенный ниже код
$filter1 = "red,green,blue,yellow"; $parts1 = explode(',', $filter1); $filter2 = "red,green,blue,purple"; $parts2 = explode(',', $filter2); $matching = array_intersect($parts1, $parts2); $non_matching = array_diff(array_merge($parts1, $parts2), $matching);
Изменение кода, который должен иметь аналогичный результат для array_diff($parts1, $parts2);
виде array_diff($parts1, $parts2);
for($i=0; $i< count($parts1); $i++) { $is_matching = false; for($j=0; $j< count($parts2); $j++) { if($parts1[$i] == $parts2[$j]) { $is_matching = true; break; } } if ($is_matching) { $match[] = $parts1[$i]; } else { $nomatch[] = $parts1[$i]; } }
Вы можете найти соответствующее значение, используя array_intersect и несоответствующее значение, используя array_diff .
Здесь вы можете увидеть LIVE DEMO
/** * @param $arr */ function pr($arr) { echo '<pre>'; print_r($arr); echo '</pre>'; } $filter1 = "red,green,blue,yellow"; $parts1 = explode(',', $filter1); $filter2 = "red,green,blue"; $parts2 = explode(',', $filter2); $match = array_intersect($parts1, $parts2); $nomatch = array_diff($parts1, $parts2); pr($match); pr($nomatch);
Экран вывода:
Array ( [0] => red [1] => green [2] => blue ) Array ( [3] => yellow )