Выбор случайного элемента из ассоциативного массива PHP

У меня есть ассоциативный массив в PHP и вы хотите выбрать из него случайную пару ключ/значение. Вот что я до сих пор:

Initialize.

$locations = array();

Цикл через SQL-запрос и добавляет пары ключ/вал:

array_push($locations, "'$location_id' => '$location_name'");

Впоследствии я выбираю случайный индекс массива:

$rand = array_rand($locations);

Rand - это просто число. Поэтому места [$ rand] дают мне что-то вроде:

'1' => 'Location 1'

ОК отличный, элемент-элемент-ассоциированный элемент. На этом этапе я не знаю ключа этого массива-помощника, поэтому я пробовал следующие вещи:

foreach($locations[$rand] as $loc_id => $location_name) { 
    echo "$key : $value<br/>\n";
}

$loc_id, $location_name = each($locations[$rand]);

$location_name = $locations[key($rand)];

Ни одна из этих трех попыток не работает. Они все бросают ошибки, такие как "Пропущенная переменная - это не массив".

Я уверен, что есть простой 1 лайнер, который может вырвать случайную пару ключ/значение из массива. Или мой синтаксис выключен. Я очень благодарен за помощь.

Ответы

Ответ 1

$array = array('a' => 1, 'b' => 2);
$key = array_rand($array);
$value = $array[$key];

Ответ 2

array_rand() возвращает ключ из массива, а не значение. Вы можете просто использовать:

$location_name = $locations[$rand];

Чтобы получить имя местоположения.


Вот полный пример: http://codepad.org/zR2YdMGN

Просто нажмите кнопку "Отправить" несколько раз, вы увидите случайную работу.

Ответ 3

ваш сигнал неправильный

$locations[$location_id] = $location_name;

он должен быть

поэтому нет ничего о выборе случайного элемента в вашем вопросе.
всегда отлаживайте свой код, чтобы убедиться, что у вас есть правильные данные перед его использованием.