php Отсортировать часть массива по образцу из другого массива -- функция
Primary tabs
Используется ArrSort::reorderSegment(): https://github.com/it-for-free/rusphp
Исходный код:
public static function reorderSegment($arr, $rightOrderedValues,
$handleOriginal = null, $handleOrderedValues = null, $addToStart = true)
{
$result = [];
$orginalFiltredArray = array_map($handleOriginal, $arr);
$filtredRightOrderedValues =
array_map($handleOrderedValues, $rightOrderedValues);
$orderedPart = [];
foreach ($filtredRightOrderedValues as $value) {
if (in_array($value, $orginalFiltredArray)) {
$currentKey =
ArrElement::getFirstKeyForValue($orginalFiltredArray, $value);
$orderedPart[$currentKey] = $arr[$currentKey];
unset($arr[$currentKey]); // убираем из исходного массива, то что "отсортировано"
}
}
if ($addToStart) {
$result = ArrMerger::mergeSavingKeys($orderedPart, $arr);
} else {
$result = ArrMerger::mergeSavingKeys($arr, $orderedPart);
}
return $result;
}
(пакет легко поставить композером).
- Log in to post comments
- 2343 reads