Получение каждой цифры отдельно из строки

94
30 июня 2021, 16:30

как можно брать цифры в строке полученную из базы "1,5,7" засунуть их в переменные или как то еще лучше чтоб типа в цикле поставить на каждую цифру свои слова которые также в базе типа селект фрукты вере айди = 5; и так в цикле на каждую

Answer 1

Обычно такие вещи делаются на уровне базы данных, что позволяет:

  1. задействовать всю мощь СУБД для операций с данными;
  2. разрешить описанные Вами проблемы на уровне запроса к БД.

Пример из реальной жизни (весьма обрезанный):

CREATE TABLE genres (
 id int UNSIGNED NOT NULL,
 name VARCHAR(50) NOT NULL COMMENT "Наименование жанра",
 PRIMARY KEY (id)
) ENGINE=INNODB;
CREATE TABLE media_objects (
 id int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
 item_type enum("container", "element") NOT NULL DEFAULT "element" COMMENT "Тип элемента - контейнер, конечный элемент (передача)",
 parent_id int UNSIGNED NULL DEFAULT NULL COMMENT "ID родительского элемента-контейнера",
 epg_id bigint UNSIGNED NOT NULL COMMENT "ID оригинального элемента программы передач",
 category_id tinyint UNSIGNED NOT NULL COMMENT "ID категории",
 title varchar(255) NOT NULL COMMENT "Название",
 desciption TEXT NOT NULL COMMENT "Описание",
 episode int UNSIGNED NULL DEFAULT NULL COMMENT "Номер серии",
 channel_id smallint UNSIGNED NULL DEFAULT NULL COMMENT "ID канала",
 duration int UNSIGNED NOT NULL DEFAULT 0 COMMENT "Длительность",
) ENGINE=INNODB;
CREATE TABLE media_objects_genres (
 media_object_id int UNSIGNED NOT NULL COMMENT "ID медиаобъекта",
 genre_id int UNSIGNED NOT NULL COMMENT "ID жанра",
 `order` tinyint UNSIGNED NOT NULL DEFAULT 0 COMMENT "Порядок сортировки жанров для медиаобъекта",
 FOREIGN KEY (media_object_id) REFERENCES media_objects(id) ON DELETE CASCADE,
 FOREIGN KEY (genre_id) REFERENCES genres(id) ON DELETE CASCADE
) ENGINE=INNODB;

Таблица media_objects_genres в данном случае представляет нам связь типа "многие-ко-многим" между таблицей медиаобъектов ("фильмов") и справочником жанров, которых у "фильма" может быть и ни одного, и несколько. Запрос "получить все наименования жанров для фильма" выглядит примерно так:

SELECT b.name
FROM media_objects_genres AS a LEFT JOIN genres AS b ON (a.genre_id=b.id)
WHERE a.media_obect_id=123
ORDER BY a.`order`;

Такое хранение данных, например, позволяет также сделать и обратную выборку - всех фильмов по жанру - достаточно просто:

SELECT DISTINCT
 b.id AS id,
 b.title AS name
FROM media_objects_genres AS a LEFT JOIN media_objects AS b ON (a.media_object_id=b.id)
WHERE a.genre_id=5 AND b.item_type="element"
ORDER BY b.title;

а также и более сложные выборки данных по многим параметрам. Ведь именно для этого и создана СУБД, именно это и есть её "хлеб". Если уж использовать СУБД, то в чем смысл делать в программе кодом то, что лучше всего умеет делать именно СУБД?

P.S. "Если мне надо хранить жанры фильмов как я это сделаю? типа строка 1 жанр такой-то есть строка 2 жанр другой нет. типа так? – Gradusnik 1 час назад" - типа как-то так...

Answer 2
$a = getGeners(3);
$a=strtr($a,array(','=>''));
for($i = 0; $i <= iconv_strlen($a); $i++){
    echo  $a{$i}.'<br>';
}

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

READ ALSO
Избежать дублирования запроса SQL

Избежать дублирования запроса SQL

Доброго времени сутокНе знаю, стоило ли сюда писать весь код, но я думаю, так будет нагляднее(а может и нет) Есть такой код, он выполняет нужную...

83
Создание сайта с разграничением прав доступа [закрыт]

Создание сайта с разграничением прав доступа [закрыт]

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы на него можно было дать ответ, основанный на фактах и цитатах

93
Экранирование символов в ini файле

Экранирование символов в ini файле

Есть функция которая считывает текст по коду с ini файл:

101
Реализация абстрактной коллекции

Реализация абстрактной коллекции

Помогите пожалуйста реализовать абстрактный класс коллекции

110