Вот решение:
Ваш массив выглядит примерно так:
$array = [
["key" => 0, "value" => 25],
["key" => 1, "value" => 25],
["key" => 2, "value" => 25],
["key" => 3, "value" => 33],
["key" => 4, "value" => 45],
["key" => 5, "value" => 66],
["key" => 6, "value" => 66],
["key" => 7, "value" => 66],
["key" => 8, "value" => 66],
["key" => 9, "value" => 55],
];
сначала найдите первое и последнее вхождение каждого значения.
Вам нужен метод, который перемещается по массиву и находит точное значение.
Посмотрите на это:
function search($search, $array)
{
foreach ($array as $key => $val) {
if ($val['value'] === $search) {
return $key;
}
}
return null;
}
Запуск $firstOccurrence = search(25, $array)
найдет первое вхождение 25
.
Теперь, чтобы найти индекс последнего вхождения, мы должны обратить массив к перемещению от конца массива. Так что $lastOccurrence = search(25, array_reverse($array, true))
найдет последний индекс вхождения 25
.
Хорошо, когда мы обрабатываем каждое значение, мы не должны его обрабатывать снова. Поэтому нам нужен массив, который будет содержать значения, которые обрабатываются.
Окончательный код:
function testArray()
{
$array = [
["key" => 0, "value" => 25],
["key" => 1, "value" => 25],
["key" => 2, "value" => 25],
["key" => 3, "value" => 33],
["key" => 4, "value" => 45],
["key" => 5, "value" => 66],
["key" => 6, "value" => 66],
["key" => 7, "value" => 66],
["key" => 8, "value" => 66],
["key" => 9, "value" => 55],
];
$processedItems = [];
$newArray = [];
foreach ($array as $index => $item) {
if (in_array($item["value"], $processedItems))
continue;
$processedItems[] = $item["value"];
$firstIndex = search($item["value"], $array);
$lastIndex = search($item["value"], array_reverse($array, true));
$newArray[$firstIndex] = $array[$firstIndex];
if ($firstIndex != $lastIndex)
$newArray[$lastIndex] = $array[$lastIndex];
}
print_r($newArray);
}
function search($search, $array)
{
foreach ($array as $key => $val) {
if ($val['value'] === $search) {
return $key;
}
}
return null;
}