Сортировка элементов ассоциативного массива в PHP

#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;
});