Сравнение массива PHP и поиск совпадающих и несогласованных элементов

Я использую этот скрипт для поиска совпадающих и несогласованных элементов массива.

Мой код.

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

Используя этот код, я получаю только совпадающие элементы и не несовпадаю. Может кто-нибудь помочь. Заранее спасибо.

Related of "Сравнение массива PHP и поиск совпадающих и несогласованных элементов"

Вы можете попробовать использовать 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 )