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

Всё, что не подходит под вышеперечисленные разделы

Модератор: immortal

Ответить
Аватара пользователя
Amarok
Сообщения: 1427
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 460 раз
Поблагодарили: 126 раз
Контактная информация:

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

Сообщение Amarok » Ср май 25, 2016 4:19 pm

Есть класс 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?
Моя Алиска живёт на Proxmox в Debian 12
ErmolenkoM
Сообщения: 560
Зарегистрирован: Ср сен 04, 2013 10:31 am
Откуда: Самара
Благодарил (а): 99 раз
Поблагодарили: 140 раз
Контактная информация:

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

Сообщение ErmolenkoM » Ср май 25, 2016 8:59 pm

Amarok писал(а): , то как взять случайный объект из класса и считать свойства url и name?
Например каждой станции присвоить порядковый номер, функцией RANDOMAZE получить случайный номер, перебирать как в приведенном примере, но проверять на совпадение номеров, а не названия станции. Ну и соответственно весь код убрать в if "любое".
За это сообщение автора ErmolenkoM поблагодарил:
Amarok (Чт май 26, 2016 8:35 am)
Рейтинг: 1.16%
aka msh555
Cubian на Cubietruck, Connect
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

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

Сообщение nick7zmail » Чт май 26, 2016 9:58 am

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

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

SELECT * FROM `table` WHERE 1 ORDER BY RAND() LIMIT 1
Тут уж хоть по названиям, хоть по ключам (порядковым номерам в ключевом поле таблицы...они там по-любому есть) ищите - без разницы.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

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

Сообщение olehs » Чт май 26, 2016 11:01 am

Есть такая ф-ция array_rand - возвращает случайный индекс в массиве.

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

$objects = getObjectsByClass("Radio");
$obj = $objects[array_rand($objects)];
$radio = gg($obj['TITLE'].".name");
$url = gg($obj['TITLE'].".url");
Еще есть shuffle() - перемешивает массив
За это сообщение автора olehs поблагодарил:
Amarok (Чт май 26, 2016 1:08 pm)
Рейтинг: 1.16%
Ответить