Starck43
@Starck43
Full-stack разработчик (Python, React)

Как переместить элемент массива вверх?

Есть такой массив:
Array
(
    [0] => Array
        (
            [value] => photo-wallpapers
            [label] => Фотообои
        )

    [1] => Array
        (
            [value] => fresco
            [label] => Фреска
        )

    [2] => Array
        (
            [value] => panno
            [label] => Панно
        )
)


Подскажите, пожалуйста, как простым способом добиться перемещения элемента, у которого в подмассиве встречается [value] => fresco?

Массив может быть и короче, но фрески есть всегда и даже уже вверху. Спасибо
  • Вопрос задан
  • 390 просмотров
Решения вопроса 2
megakor
@megakor
Go/PHP developer | ВКонтакте
$array = [
    ['value' => 'photo-wallpapers', 'label' => 'Фотообои'],
    ['value' => 'fresco', 'label' => 'Фреска'],
    ['value' => 'panno', 'label' => 'Панно'],
    ['value' => 'fresco', 'label' => 'Test'],
    ['value' => 'ttt', 'label' => 'WoW'],
];

function sortArrayByFresco(array &$array) {
    usort($array, function ($a, $b) {
        $isFrescoA = $a['value'] === 'fresco';
        $isFrescoB = $b['value'] === 'fresco';

        if ($isFrescoA && $isFrescoB) {
            return 0;
        }

        return $isFrescoA ? -1 : $isFrescoB;
    });
}

// Test
sortArrayByFresco($array);

print_r($array);

/*
Array
(
    [0] => Array
        (
            [value] => fresco
            [label] => Фреска
        )

    [1] => Array
        (
            [value] => fresco
            [label] => Test
        )

    [2] => Array
        (
            [value] => photo-wallpapers
            [label] => Фотообои
        )

    [3] => Array
        (
            [value] => panno
            [label] => Панно
        )

    [4] => Array
        (
            [value] => ttt
            [label] => WoW
        )

)
*/
Ответ написан
@IS-Builder
~ PHP-8 & REGEXP - This is a really powerful kit ~
Есть вариант по-компактнее:
$array = [
    ['value' => 'photo-wallpapers', 'label' => 'Фотообои'],
    ['value' => 'fresco', 'label' => 'Фреска'],
    ['value' => 'panno', 'label' => 'Панно'],
    ['value' => 'fresco', 'label' => 'Test']
];

usort($array, function($a, $b){
    return $a['value'] <=> $b['value'];
});

var_dump($array);

Он вполне подойдёт для текущего массива.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы