Сортировать массив по имени PHP - PullRequest
0 голосов
/ 02 мая 2018

У меня есть этот ассоциативный массив, который я хочу отсортировать в произвольном порядке (не только в алфавитном порядке) :

$arr = [
    '1' => 'Lorem Ipsum 1',
    '2' => 'Lorem Ipsum 3',
    '3' => 'Lorem Ipsum 2',
    '4' => 'Text A',
    '5' => 'Text B',
    '6' => 'Text C',
    '7' => 'Lorem Ipsum 4',
    '8' => 'Text D',
    '9' => 'Text E',
];

Мне нужен этот вывод:

$arr = [
    '4' => 'Text A',
    '5' => 'Text B',
    '6' => 'Text C',
    '8' => 'Text D',
    '9' => 'Text E',
    '1' => 'Lorem Ipsum 1',
    '3' => 'Lorem Ipsum 2',
    '2' => 'Lorem Ipsum 3',
    '7' => 'Lorem Ipsum 4'
];

Как сортировать массив (сохранить связь ключ-значение)

  • Сортировать массив по алфавиту
  • После этого все значения, начинающиеся с Текст , должны быть сверху

Я уже пробовал это сделать с помощью функции uasort, но не смог выяснить, как их отсортировать, начиная с Text .

Спасибо

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

используйте asort. http://php.net/manual/en/function.asort.php.

 asort($arr);

asort () - Поддерживает связь ключей: да.

0 голосов
/ 02 мая 2018

Вы можете использовать uasort(), а в функции сортировки проверить, начинается ли значение с "Text". Если так, сортируйте, используя этот случай, иначе сортируйте естественно:

$arr = [
    '1' => 'Lorem Ipsum 1',
    '2' => 'Lorem Ipsum 3',
    '3' => 'Lorem Ipsum 2',
    '4' => 'Text A',
    '5' => 'Text B',
    '6' => 'Text C',
    '7' => 'Lorem Ipsum 4',
    '8' => 'Text D',
    '9' => 'Text E',
];
uasort($arr, function($a, $b){
    $a_text = strpos($a, 'Text') === 0;
    $b_text = strpos($b, 'Text') === 0;
    if ($a_text != $b_text) {
        return $b_text - $a_text ;
    }
    return strnatcmp($a,$b);
});
print_r($arr);

Выход:

Array
(
    [4] => Text A
    [5] => Text B
    [6] => Text C
    [8] => Text D
    [9] => Text E
    [1] => Lorem Ipsum 1
    [3] => Lorem Ipsum 2
    [2] => Lorem Ipsum 3
    [7] => Lorem Ipsum 4
)
0 голосов
/ 02 мая 2018
$arr = [
        '1' => 'Lorem Ipsum 1',
        '2' => 'Lorem Ipsum 3',
        '3' => 'Lorem Ipsum 2',
        '4' => 'Text A',
        '5' => 'Text B',
        '6' => 'Text C',
        '7' => 'Lorem Ipsum 4',
        '8' => 'Text D',
        '9' => 'Text E',
    ];

    rsort($arr);
    var_dump($arr);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...