Страница 1 из 1

Массивы. Как?

Добавлено: Ср май 25, 2016 4:19 pm
Amarok
Есть класс Radio, со свойствами url, name, site. В этом классе несколько объектов (Mayak, Avtoradio, DanceRadio и т.д.).
Как собрать массив станций, что-б можно было при совпадении свойства name получить значение свойства url?
Для чего?

Код: Выделить всё

- Алиса, включи радио
- Какое?
- Маяк
Алиса перебирает объекты в Radio, находит станцию с name=Маяк, считывает url и пихает его в плеер. Конечно, это можно сделать подобным кодом:

Код: Выделить всё

  $objects = getObjectsByClass("Radio");
  foreach($objects as $obj) {
  $radio  = mb_strtolower(gg($obj['TITLE'].".name"),  'UTF-8');
  if ($radio  == $name) {
   $url= gg($obj['TITLE'].".url");
  }
 } 
Но если диалог будет таким:

Код: Выделить всё

- Алиса, включи радио
- Какое?
- любое
, то как взять случайный объект из класса и считать свойства url и name?

Re: Массивы. Как?

Добавлено: Ср май 25, 2016 8:59 pm
ErmolenkoM
Amarok писал(а): , то как взять случайный объект из класса и считать свойства url и name?
Например каждой станции присвоить порядковый номер, функцией RANDOMAZE получить случайный номер, перебирать как в приведенном примере, но проверять на совпадение номеров, а не названия станции. Ну и соответственно весь код убрать в if "любое".

Re: Массивы. Как?

Добавлено: Чт май 26, 2016 9:58 am
nick7zmail
Самое простое - действительно номера присвоить, если у вас станции в объектах системы. Чуть сложнее - можно делать запрос напрямую к sql базе. Есть функция чтобы рандомную строку выдавать

Код: Выделить всё

SELECT * FROM `table` WHERE 1 ORDER BY RAND() LIMIT 1
Тут уж хоть по названиям, хоть по ключам (порядковым номерам в ключевом поле таблицы...они там по-любому есть) ищите - без разницы.

Re: Массивы. Как?

Добавлено: Чт май 26, 2016 11:01 am
olehs
Есть такая ф-ция array_rand - возвращает случайный индекс в массиве.

Код: Выделить всё

$objects = getObjectsByClass("Radio");
$obj = $objects[array_rand($objects)];
$radio = gg($obj['TITLE'].".name");
$url = gg($obj['TITLE'].".url");
Еще есть shuffle() - перемешивает массив