Как отсортировать ассоциативный массив в PHP, затем найти строковый индекс результатов - PullRequest
0 голосов
/ 16 марта 2012

Если у меня есть ассоциативный массив, подобный этому

$array = array();
$array['e01'] = '03/16/2012';
$array['e02'] = '03/14/2012';
$array['e05'] = '03/01/2014';

Я бы хотел отсортировать массив по дате, а затем перебрать результаты, чтобы получить значение индекса, т.е. e01, e02, e05.Мне нужен этот индекс для извлечения информации из объекта.

Ответы [ 4 ]

1 голос
/ 16 марта 2012

При сортировке ассоциативного массива ключи и значения меняют порядок, но связь ключ-значение не изменится. Поэтому, если ключ e01 имеет значение 03/16/2012, даже после uasort (что, вероятно, то, что вы ищете, см. Ответ Crashspeeder), e01 все равно будет иметь значение 03/16/2012. Если вы хотите изменить порядок значений при сохранении порядка клавиш:

  • использовать array_keys для получения текущего порядка ключей
  • используйте usort (нет необходимости в uasort, поскольку мы не сохраняем ключи), чтобы отсортировать значения по дате
  • используйте array_combine для создания нового массива с ключами и значениями.
1 голос
/ 16 марта 2012

Попробуйте uasort() отсортировать массив:

function mysort($a, $b) {
    return (strtotime($a) < strtotime($b)) ? -1 : 1;
}

uasort($array, 'mysort');

Для получения ключей вы можете просто использовать array_keys()

0 голосов
/ 16 марта 2012

Используйте функцию array_keys .

0 голосов
/ 16 марта 2012

Из документации PHP на asort(). Это отсортирует его по значению и позволит вам получить доступ к ключу и значению каждого индекса:

$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
asort($fruits);
foreach ($fruits as $key => $val) {
    echo "$key = $val\n";
}
...