У меня есть набор многомерного массива из 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;
Вы можете перебирать массив, отслеживая, какие 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);
Других решений пока нет …