Стоит ли принимать $_GET параметр в функцию? например принимаем $_GET['id'] Код (PHP): function getResult($id){ //что то делаем с $id } print_r (getResult($_GET['id'])); function getResult(){ $id = $_GET['id']; //что то делаем с $id[ } print_r (getResult()); какая здесь разница???
разница очевидна же. в первом случае создается функция которая работает с некоторым (любым) идентификатором. то есть будет не важно откуда она появилась перед вызовом функции. во втором случае создается функция которая жестко работает с определенным ключом определенного суперглобального массива. то есть невозможно подпихнуть другое значение не переопределив оригинальное. вот и вся разница в алгоритмах. а вот где какое юзать - уже будет зависеть от архитектуры приложения.
вот и решай как именно ты будешь выводить инфу из бд по ид. сценарий 1. ты пишешь функцию "чтения из бд по ид". и передаешь в неё нужный айдишник. очень гибкий вариант. можешь пачками айдишники выбирать если надо. рекомендую. сценарий 2. ты пишешь функцию "чтения из бд по ид указанному в ключе таком-то массива такого-то". ну тут грубо говоря ты вызвал функцию и она нашла или не нашла айдишник в запросе и потом нашла или не нашла в бд инфу с таким айдишником... в общем, в контексте "вывести инфу из бд по ид" я бы первый вариант юзал.
с этим все ясно, спасибо) 2-й вопрос: пришел массив айдишников с формы Код (Text): $arr = array(1,4,9,20); вариант первый: есть функция выборки инфы по id Код (Text): function getResult($id){ //Функция возвращает инфу (чего то) по id } нужно в цикле вывести информацию по айдишниках с формы Код (Text): foreach($arr as $value){ $result = getResult($value); echo $result['поле чего то']; } вариант второй: есть функция выборки инфы Код (Text): function getResult($array){ //преобразование массива айдишников в строку $list_id = implode(',', $array); //запросс $query = 'SELECT `все поля` FROM `таблица` WHERE `id` IN("$list_id")'; //Возвращаем массив по выбранным id } и простой вывод Код (Text): $arr = getResult($arr); foreach($arr as $value){ echo $value['поле чего то']; } какой вариант будет правильней и быстрее???
А если допустим с формы мне придут айдишники и количество раз выводимой инфы по каждому айдишнику, пример : Код (Text): $arr = array(1=>3,4=>3,9=>2,20=>2); то есть, айди 1 нужно вывести 3 раза, айди 4 нужно вывести 3 раза, айди 9 нужно вывести 2 раза, айди 20 нужно вывести 2 раза то уже второй вариант мне не подойдет, в отличии от первого, как с этим быть???
что значит "вывести три раза"? айдишник у тебя в базе ОДИН. если он тебе нужен - ты его ОДИН раз прочитаешь. а выводить выводи сколько хочешь. в чем сложность?
есть форма, с формы пришли массив айдишников, у каждого айдишника с формы есть количество "чего то", теперь нужно вывести информацию с БД по этим айдишникам и добавить при выводе поле "чего то"!
с формы придет массив айдишников, и каждому айдишнику будет привязано "что-то", например Код (PHP): $arr = array ( array('id'=>1,'дополнительное поле'=>'что-то'), array('id'=>4,'дополнительное поле'=>'что-то'), array('id'=>9,'дополнительное поле'=>'что-то'), array('id'=>20,'дополнительное поле'=>'что-то') ); и нужно вывести всю инфу по этим айдишникам и добавить каждому айдишнику поле => 'что-то' при выводе!
вот я и спрашиваю, как??? есть конечно идея, выбираем всю инфу с БД по всем айдишникам в массив, потом сравнивать этот массив с тем что с формы, и выводим инфу по тем айдишникам, которые пришли с формы и дополнительное к ним поле! Добавлено спустя 2 минуты 34 секунды: ну я думаю, что можно как то иначе это реализовать! потому что если у меня 1000 000 записей в таблице, то выборка и сравнение массивов много времени будет занимать(
вот 2-ю намутил) берем массив с формы - вырезаем только поля с id - выбираем с БД инфу по этим айди - потом циклом сравниваем массив с БД и массив с формы - и выводим всю информацию по этим айдишникам присвоив каждому айди "дополнительное поле" что будет правильней и быстрее???
правильный алгоритм тот который работает как нужно. то есть как ты понимаешь если у задачи несколько решений то все они правильные. далее уже вопрос в том какое решение вписывается в архитектуру приложения. быстрее? ну ты напиши бенчмарк да сравни пару-тройку примеров реализаций. и узнаешь какой алгоритм быстрее работает а какой быстрее пишется. ты тратишь время на бессмысленную разведку. тебе сейчас сидеть кодить надо а не спрашивать как лучше. когда ты станешь программистом ты сам поймешь как лучше.
лучше всегда использовать 1-й вариант. а в нагрузку к нему использовать еще одну функцию для работы с $_GET параметрами.
ну ведь вроде уже писали, чем меньше запросов тем лучше, по этому получай за раз все что нужно, а не по одному запросу. и кстати если мне не изменяет память в книге по которой я учился было написано что очень не рекомендовано выполнять запросы к БД в через цикл.
в моей ситуации 2-й вариант не сработает!( с формы придет массив айдишников, и каждому айдишнику будет привязано "что-то", например Код (PHP): $arr = array ( array('id'=>1,'дополнительное поле'=>'что-то'), array('id'=>4,'дополнительное поле'=>'что-то'), array('id'=>9,'дополнительное поле'=>'что-то'), array('id'=>20,'дополнительное поле'=>'что-то') ); и нужно вывести всю инфу по этим айдишникам и добавить каждому айдишнику поле => 'что-то' при выводе!
чувак, ты вообще собираешься уроки там какие-нибудь почитать, мануальчики? выбери пакетом все айдишники из базы да склей по этим айдишникам с той дополнительной "что-той" от которой ты так горишь. в чем сложность-то?
поставим другую задачу! есть 3 таблицы: 1-я фильмы ( поля id,title и т.д ) 2-я актеры ( поля id,name и т.д ) 3-я роли в фильмах (поля id_movie, id_actor) - это для связки фильмов и актеров Мы зашли на страницу актера, например айди 1, вывели его фильмы - это просто) Теперь мне надо вывести на этой же страницы всех актеров, которые играли роли вместе с этим актером (айди 1) в одном фильме, и подсчитать количество общих фильмов по каждому актеру! Пример: станица актера - айди 1 он играл роль с актером - айди 2 (количество общих фильмов - 1) он играл роль с актером - айди 6 (количество общих фильмов - 2) он играл роль с актером - айди 8 (количество общих фильмов - 2) он играл роль с актером - айди 9 (количество общих фильмов - 3) он играл роль с актером - айди 84 (количество общих фильмов - 1) выборку делаю в таблицы роли (получаю количество айди актеров и количество общих фильмов по каждому актеру), а выводить информацию об актерах мне уже надо с таблицы актеры, как с этим быть???
Все GET надо чистить, неизвестно что введет пользователь в адресной строке ручками, отдельный файл со стандартными GET делаешь и включаешь в нужных файлах. По любому выйдешь на $id (if (!empty($id)))