Избиране на произволен елемент от PHP асоциативен масив

Имам асоциативен масив в PHP и искам да избера произволна двойка ключ/стойност от него. Ето какво имам досега:

Инициализиране.

$locations = array();

Преминава през SQL заявка и добавя двойки ключ/вал:

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

По-късно избирам произволен индекс на масива:

$rand = array_rand($locations);

Ранд е просто число. Така че locations[$rand] ми дава нещо като:

'1' => 'Location 1'

Добре, страхотно, допълнителен елемент от масив. На този етап не знам ключа на този assoc масив, така че опитах следните неща:

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 линия, която може да извади произволна двойка ключ/стойност от масива. Или моят синтаксис е изключен. Наистина ще се радвам на помощта.


person Jeff    schedule 26.08.2011    source източник


Отговори (3)


array_rand() връща ключ от масива, а не стойност. Можете просто да използвате:

$location_name = $locations[$rand];

За да получите името на местоположението.


Ето пълен пример: http://codepad.org/zR2YdMGN

Просто щракнете върху изпращане няколко пъти и ще видите, че случайният избор работи.

person Paul    schedule 26.08.2011
comment
Това все още не дава ключа. - person Mark Biesheuvel; 26.08.2011
comment
Добре, съжалявам. Тогава твърдението ($rand е просто число) от OP е грешно. И бях достатъчно глупав да не потвърдя това твърдение. - person Mark Biesheuvel; 26.08.2011
comment
@M_rk Връща ключа :) Актуализирах отговора си, така че да има връзка към страницата на PHP Man за array_rand - person Paul; 26.08.2011

вашият тласък е грешен

$locations[$location_id] = $location_name;

трябва да бъде

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

person Your Common Sense    schedule 26.08.2011

person    schedule
comment
Вашият проблем е в array_push($locations, "'$location_id' => '$location_name'");. Направете това вместо това: $locations[$location_id] = $location_name;. Тогава array_rand($location) ще върне произволно $location_id; и можете да получите името с $name = $locations[$location_id]. - person Arnaud Le Blanc; 26.08.2011
comment
всички сте прави, разбира се - току-що избрах този, преди да работя най-добре с примерен код. и да, доста ме е неудобно, че натискането не е правилно. кодирам много в perl (w хешове), така че трябваше да знам по-добре! БЛАГОДАРЯ ТИ! - person Jeff; 26.08.2011
comment
браво, спаси ми деня - person Shahrokhian; 29.01.2014