Разница в массивах с дубликатами

0

Мой сценарий таков: у меня есть два набора значений, которые мне нужно проверить на различия. Однако array_diff не учитывает дублирование и, следовательно, не будет служить моей цели. Скажем, у нас есть следующие массивы:

$valuesA = array('1.00', '3.00', '1.00', '2.00', '3.00', '1.00');
$valuesB = array('1.00', '3.00', '2.00');

Теперь я хочу выполнить проверку разницы между этими двумя, но учитывать дубликаты. По существу после "diff" существовал бы следующий массив:

array('1.00', '3.00', '1.00');

Теперь, как я это сделал, было следующее:

foreach ($valuesA as $indexA => $valueA) {

    foreach ($valuesB as $indexB => $valueB) {

        if($valueA == $valueB){

            unset($valuesB[$indexB]);
            unset($valuesA[$indexA]);
            continue 2;

        }
    }
}

Я всегда чувствовал, что всякий раз, когда я пишу вложенные циклы, подобные этим предкам, я делаю что-то неправильно или что там уже существует лучшее решение. Поэтому мой вопрос таков:

Есть ли лучший способ достичь того, что делают эти вложенные предвидения?

  • 0
    посмотрите этот ответ, похоже, что вы ищете решение: stackoverflow.com/questions/16973365/…
  • 0
    Извините, если я неправильно понимаю, но должен array('1.00', '3.00', '1.00'); фактически прочитанный array('1.00', '3.00', '2.00'); потому что 1,00, 3,00 и 2,00 являются единственными уникальными значениями, или я неправильно понимаю, что вы ищете?
Теги:
arrays
nested-loops
foreach

1 ответ

0
array_intersect($valuesA, $valuesB);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню