#php #associative-array
#php #ассоциативный массив
Вопрос:
я получил ассоциативный массив следующим образом:
$data['england']='pound'
$data['america']='dollar'
$data['europe']='euro'
$data['denmark']='krone'
$data['japan']='yen'
Я хочу отсортировать этот массив, и после этого я хочу, чтобы «Европа» была первым элементом в массиве. Для сортировки массива я использую ksort () в php, теперь, как я могу получить доступ к объекту массива ‘europe’, чтобы я мог сделать его первым элементом и сдвинуть все остальные элементы вниз?
Комментарии:
1. Я предлагаю использовать лучшую структуру данных
2. если вы уже нашли
ksort
в руководстве, что помешало вам изучить другие*sort
функции? Кроме того, какова ваша логика сортировки? Просто ставим Европу на первое место? Как насчет других элементов?3. моя логика сортировки заключается в том, что все элементы должны быть отсортированы по их ключам, за исключением ‘euro’, который должен быть наверху!!
4. нет, это не так!! он сортируется в алфавитном порядке с помощью ksort(). чего я не знаю и почему я задал этот вопрос, так это знать, как кто-то может получить доступ к элементам в ассоциативном массиве, не зная ключа. например, в обычном массиве вы можете использовать array[0] для получения первого элемента, array[1]чтобы получить второй элемент, array[2], чтобы получить третий элемент … как я могу получить первый, второй и третий элемент etc, когда его ассоциативный массив!!
5. $array[0] не обязательно возвращает первый элемент. Возвращает элемент с числовым ключом 0. Это может быть, но не может быть элементом со смещением / позицией 0. если вы хотите получить Европу из этого массива, используйте $array[‘europe’] . Пожалуйста, обновите свои знания о массивах на php.net/manual/en/language.types.array.php
Ответ №1:
Одним из решений было бы сначала удалить Европу из массива, а затем выполнить ksort. Когда массив отсортирован, вы можете использовать array_unshift()
или array_merge()
, чтобы добавить Европу в качестве первого элемента в массив.
Пример использования слияния:
<?php
$data['england']='pound';
$data['america']='dollar';
$data['europe']='euro';
$data['denmark']='krone';
$data['japan']='yen';
unset($data['europe']);
ksort($data);
$data = array('europe' => 'euro') $data;
print_r($data);
?>
Использование
оператора не приведет к переиндексации массива, как это сделал бы оператор слияния.
Ответ №2:
Вы могли бы использовать обратный вызов для сортировки:
$data = array (
'england' => 'pound',
'america' => 'dollar',
'europe' => 'euro',
'denmark' => 'krone',
'japan' => 'yen'
);
uksort($data, function($a, $b) {
if($a == 'europe') return -1;
if($b == 'europe') return 1;
return $a > $b;
});