У меня возникла проблема с созданием функции PHP, которая может присваивать значения многомерному ассоциативному массиву на основе результатов SQL-запроса.Как использовать функцию для присвоения значений массиву из SQL-запроса
Я просмотрел некоторые другие вопросы по этой теме, но я не мог сказать, применимы ли ответы на меня. Мой вопрос казался более простым, чем другие вопросы. Я не уверен, как объяснить это словами, поэтому я попытаюсь объяснить код.
Скажем, у меня есть эта база данных с несколькими таблицами, которые содержат все виды информации о разных породах собак. Высота, вес, цвет и т. Д. Более 50 столбцов информации. Я хочу вывести 5 конкретных пород из этой базы данных на основе разных критериев поиска, но я хочу присвоить все одинаковые столбцы переменным массива. Поэтому вместо повторения этих длинных циклов while
снова и снова, я хотел создать функцию, которая назначила бы эти переменные для меня.
Пример
$sql1 -> //Query for German Shepherd info
$sql2 -> // Query for Golden Retriever info
$sql3 -> // Query for Poodle info
$sql4 -> //Query for Pit Bull info
$sql5 -> // Query for Bulldog info
$dogs = array(array()); // set up 2 level multi-array
Долгий путь (который делает работу, хотя это излишним), чтобы присвоить значения через различные while
петли и повторить все столбцы снова и снова.
while ($rows = $sql1->fetch(PDO::FETCH_ASSOC)){
$dogs[1]['breed_name'] = $rows['breed_name'];
$dogs[1]['height'] = $rows['height'];
$dogs[1]['weight'] = $rows['weight'];
$dogs[1]['country'] = $rows['country'];
$dogs[1]['function'] = $rows['function'];
etc .. etc .. etc..
}
while ($rows = $sql2->fetch(PDO::FETCH_ASSOC)){
$dogs[2]['breed_name'] = $rows['breed_name'];
$dogs[2]['height'] = $rows['height'];
$dogs[2]['weight'] = $rows['weight'];
$dogs[2]['country'] = $rows['country'];
$dogs[2]['function'] = $rows['function'];
etc .. etc .. etc..
}
while ($rows = $sql3->fetch(PDO::FETCH_ASSOC)){
$dogs[3]['breed_name'] = $rows['breed_name'];
$dogs[3]['height'] = $rows['height'];
$dogs[3]['weight'] = $rows['weight'];
$dogs[3]['country'] = $rows['country'];
$dogs[3]['function'] = $rows['function'];
etc .. etc .. etc..
}
Я бы скорее просто написал функцию, которую я мог бы назвать для каждой породы по мере необходимости. Затем я мог сохранить функцию на странице внешних функций, которую я включил на любую страницу, над которой я работаю. Это сэкономит пространство и силы. Но я не могу найти HOW для этого. Кажется, это должно быть просто, но я, кажется, что-то упускаю.
Я до сих пор пробовал 2 разных способа, и не дал никаких результатов.
Покушение 1
//set up the function
function setDog($dogs, $d) {
$dogs[$d]['breed_name'] = $rows['breed_name'];
$dogs[$d]['height'] = $rows['height'];
$dogs[$d]['weight'] = $rows['weight'];
$dogs[$d]['country'] = $rows['country'];
$dogs[$d]['function'] = $rows['function'];
etc .. etc .. etc..
}
//call the function
while ($rows = $sql1->fetch(PDO::FETCH_ASSOC){setDog($dogs, 1);}
while ($rows = $sql2->fetch(PDO::FETCH_ASSOC){setDog($dogs, 2);}
while ($rows = $sql3->fetch(PDO::FETCH_ASSOC){setDog($dogs, 3);}
while ($rows = $sql4->fetch(PDO::FETCH_ASSOC){setDog($dogs, 4);}
while ($rows = $sql5->fetch(PDO::FETCH_ASSOC){setDog($dogs, 5);}
Но это не сработало (значения не были назначены на массив), поэтому я попытался переключения его
Покушение 2
//set the function
function setDog($dogs, $d, $sql){
while ($rows = $sql->fetch(PDO::FETCH_ASSOC)){
$dogs[$d]['breed_name'] = $rows['breed_name'];
$dogs[$d]['height'] = $rows['height'];
$dogs[$d]['weight'] = $rows['weight'];
$dogs[$d]['country'] = $rows['country'];
$dogs[$d]['function'] = $rows['function'];
etc .. etc .. etc..
}
}
//call the function
setDog($dogs, 1, $sql1);
setDog($dogs, 2, $sql2);
setDog($dogs, 3, $sql3);
setDog($dogs, 4, $sql4);
setDog($dogs, 5, $sql5);
Этот второй, казалось, с наибольшей вероятностью работал, но он по-прежнему не задавал никаких значений в моем массиве. Я проверяю, вызывая случайные переменные массива (height, country, breed_name), и все они выходят пустым.
echo $dogs[1]['breed_name'];
Я чувствую себя так, или что-то в этом роде, должно быть возможно. Понятие кажется таким простым, но я должен что-то упустить. Может ли кто-нибудь помочь мне понять это?
EDIT !!
Я испортил свой пример в первый раз. Предполагалось включить аргумент $ d, но я просто скопировал и вложил кучу неправильного кода. Он должен быть исправлен.
To mo diffy исходный массив '$ dogs', вы должны передать его [по ссылке] (http://php.net/manual/en/language.references.pass.php). Но весь ваш код кажется немного запутанным. Я., вы понимаете, что вы переопределяете один и тот же ключ массива? И почему вы передаете '$ d', чтобы функционировать, если вы его не используете? – fusion3k
, используя только один индекс, недостаточно, существует много типов пуделей, вы не можете просто использовать '1', он просто перезапишет их и получит последний тип в конце, я бы предложил просто использовать предложение 'in', подайте пользовательскую функцию с помощью массива' poodle, bulldog', затем просто используйте уникальный идентификатор и назначьте его как ключ в своем массиве – Ghost
DOH! Я испортил свой пример. В функции, где сказано 1, ДОЛЖНО сказать $ d. Я поменяю его. –