Выбор случайного элемента из ассоциативного массива PHP - PullRequest
16 голосов
/ 26 августа 2011

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

Инициализировать.

$locations = array();

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

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

Позже я выбираю случайный индекс массива:

$rand = array_rand($locations);

Рэнд это просто число. Итак, местоположение [$ 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)];

Ни одна из этих 3 попыток не работает. Все они выдают ошибки типа «Переданная переменная не является массивом».

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

Ответы [ 3 ]

28 голосов
/ 26 августа 2011
$array = array('a' => 1, 'b' => 2);
$key = array_rand($array);
$value = $array[$key];
5 голосов
/ 26 августа 2011

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

$location_name = $locations[$rand];

Чтобы получить название места.

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

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

1 голос
/ 26 августа 2011

Ваш толчок неверен

$locations[$location_id] = $location_name;

должно быть

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

...