Подсчитать два дубликата и другое уникальное значение в массиве

У меня есть набор многомерного массива из 10, и я хочу получить 4 записи из этого массива, но первые 2 записи должны иметь одинаковый dealer_id + другие 2 уникальны и могут быть одинаковыми. Но первые 2 должны иметь один и тот же dealer_id. Если в массиве нет повторяющихся записей, то все 4 записи различны. поэтому любая идея о том, что будет самым быстрым и наиболее эффективным способом сделать это.

$array = array(array("_source" => array("dealer_id" => 2)),
array("_source" => array("dealer_id" => 3)),
array("_source" => array("dealer_id" => 2)),
array("_source" => array("dealer_id" => 5)),
array("_source" => array("dealer_id" => 7)),
array("_source" => array("dealer_id" => 9)),
array("_source" => array("dealer_id" => 8)),
array("_source" => array("dealer_id" => 10)),
array("_source" => array("dealer_id" => 12)),
array("_source" => array("dealer_id" => 3)),
array("_source" => array("dealer_id" => 12)));

Я попробую это.

$arr2 = array();
$counter = 0;
for ($arr = 0; $arr < count($array); $arr++) {

if (in_array($array[$arr], $arr2)) {
++$counter;
continue;
} else {
$arr2[] = $array[$arr];
}
}
echo "<pre>";print_r($arr2);die;

1

Решение

Вы можете перебирать массив, отслеживая, какие dealer_id вы уже видели в массиве, проиндексированном dealer_id, Как только вы получите 1-й дубликат, выйдите из итерации и получите еще 2 строки (или 4, если дубликатов не было).

$indexed_array = [];
$results = [];

foreach ($array as $e) {
if (!isset($indexed_array[$e['_source']['dealer_id']])) {
$indexed_array[$e['_source']['dealer_id']] = $e;
}
else {
// add the 2 results with the same dealer_id to your results
$results[] = $indexed_array[$e['_source']['dealer_id']];
$results[] = $e;
break;
}
}if (!empty($results)) {
// get 2 more elements with a different dealer_id
foreach ($array as $e) {
if ($e['_source']['dealer_id'] != $results[0]['_source']['dealer_id']) {
$results[] = $e;
if (count($results) > 3) {
break;
}
}
}
}
else {
// there are no duplicates so just get the 1st 4 elements
$results = array_slice($array, 0, 4);
}

print_r($results);

демонстрация

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector