PHP foreach не работает

У меня есть пара проблем со следующим кодом ... По существу, несколько значений нужно будет хранить в $ sqlBAnswer , но если я просто поставлю [] после него, он сохраняет значение «Массив» .

//Find the answer given by the user to the last answered question
$sqlB = mysql_query("SELECT Answer FROM Responses WHERE User = $sqlAPKID");
//If the operation produces an error, output an error message
if (!$sqlB) {
    die('Invalid query for SQLB: ' . mysql_error());
}
//Count the number of rows output
$sqlBCount = mysql_num_rows($sqlB);
//If rows exist, define the values
if ($sqlBCount > 0) {
    while ($row = mysql_fetch_array($sqlB)) {
        $sqlBAnswer = $row["Answer"];
    }
}

Предполагая, что $ sqlBAnswer удалось сохранить несколько значений, мне нужно выполнить другой запрос, который будет производить только одно значение (т. Е. Только одно из значений, хранящихся в $ sqlBAnswer , будет в результирующем наборе.

Я планирую сделать это, используя цикл foreach вокруг следующего кода:

//Find the number of the next question to be answered based on the user's previous answer and the question they answered
$sqlC = mysql_query("SELECT NextQuestion FROM Answers WHERE QuestionNumber = $sqlALastQuestionAnswered AND PKID = $sqlBAnswer");
//If the operation produces an error, output an error message
if (!$sqlC) {
    die('Invalid query for SQLC: ' . mysql_error());
}
//Count the number of rows output
$sqlCCount = mysql_num_rows($sqlC);
//If rows exist, define the values
if ($sqlCCount > 0) {
    while ($row = mysql_fetch_array($sqlC)) {
        $sqlCNextQuestion = $row["NextQuestion"];
    }
}

То, что мне нужно иметь в конце, - это одно значение и одно значение только для sqlCNextQuestion , но я не могу обернуть голову вокруг клавиш и значений, а еще многое, что я прочитал в документации. Если бы кто-нибудь мог объяснить и показать мне, как я мог бы добиться того, что мне нужно, я был бы очень благодарен!

Благодаря :)

1
nl ja de
Что вы имеете в виду, это сохраняет значение «Массив». Когда вы добавляете «[]» после $ sqlBAnswer, он делает массив из $ row [«Ответ»] После этого кода с print_r ($ sqlBAnswer); Вы можете видеть, что это массив из $ row ["Answer"] для сортировки. Вы можете использовать asort, sort, ... В PHP или Use Order In query
добавлено автор mohammad mohsenipur, источник
вы можете использовать array_push вместо put "[]"
добавлено автор mohammad mohsenipur, источник
Почему бы просто не выполнить JOIN в самой MySQL?
добавлено автор Ja͢ck, источник
используйте PDO или MYSQLI вместо MYSQL
добавлено автор mamdouh alramadan, источник

2 ответы

На данный момент в вашем коде $ sqlBAnswer - это не массив, а просто нормальная переменная. Ваш код:

if ($sqlBCount > 0) {
    while ($row = mysql_fetch_array($sqlB)) {
        $sqlBAnswer = $row["Answer"];
    }
}

просто перебирает строки в результате запроса и повторно присваивает значение $ row ["Answer"] $ sqlBAnswer в каждой строке.

Если вы хотите сохранить эти значения в массиве, вы просто выполните следующее:

$sqlBAnswer = array(); //that creates a blank array to assign values to
if ($sqlBCount > 0) {
    while ($row = mysql_fetch_array($sqlB)) {
        $sqlBAnswer[] = $row["Answer"]; //note the '[]', which tells PHP to add the new value to the array
    }
}

Затем вы можете сделать свой foreach следующим образом:

foreach($sqlBAnswer as $value){
   //use your code with $sqlBAnswer substituted by $value
}

Однако, что касается того, как вы выберете значение $ sqlCAnswer, которое вы хотите в конце, вы не описали адекватно то, что хотите, чтобы я мог ответить на это. Этот код будет проходить через все значения $ sqlBAnswer и, вероятно, выдает много значений $ sqlCAnswer (в зависимости от вашей базы данных), поэтому вам нужно уточнить свой вопрос или выяснить, как решить эту проблему.

3
добавлено
Спасибо Чиду, я попробую это сейчас :) Что касается последней части вашего вопроса, я объясню немного иначе ... $ sqlBAnswer будет производить 5 значений (например). Из этих 5 значений только одна будет присутствовать в таблице, которую я запрашиваю, чтобы найти $ sqlCNextQuestion. Мне просто нужен способ вытащить это значение. Надеюсь это имеет смысл!
добавлено автор Zulu Irminger, источник
Я только что дал это идти Чиду, но он все еще читает $ sqlCNextQuestion как пустой набор и, следовательно, перенаправляется на другую страницу. Это почти так, как будто это либо не находит эту ценность вообще, либо она находит ее, а затем перезаписывается пустым набором ...
добавлено автор Zulu Irminger, источник
Хорошо, теперь это сработало - СПАСИБО! Я только помещал запрос в цикл foreach, а не весь второй блок кода.
добавлено автор Zulu Irminger, источник

Решение проблемы 1

$sqlBAnswer = $row["Answer"];

Должно быть

$sqlBAnswer[] = $row["Answer"];

Я знаю, что вы упомянули, что он просто хранит «Массив». Но это неверно, он правильно создает массив, так что вы неправильно обращаетесь к нему здесь

$sqlC = mysql_query("SELECT NextQuestion FROM Answers WHERE QuestionNumber = $sqlALastQuestionAnswered AND PKID = $sqlBAnswer"); //No index being provided for array access

В foreach, как вы упомянули, это будет выглядеть следующим образом

foreach($sqlBAnswer as $ans)
{
$sqlC = mysql_query("SELECT NextQuestion FROM Answers WHERE QuestionNumber = $sqlALastQuestionAnswered AND PKID = $ans");
}
0
добавлено
Какова стоимость $ sqlALastQuestionAnswered
добавлено автор Hanky Panky, источник
Спасибо за ваш ответ - это то, что я пробовал раньше, и через отчет об ошибках, как только submit и он пытается найти следующий вопрос, я получаю это сообщение об ошибке: «Неверный запрос для SQLC: Неизвестный столбец« Массив »в 'where clause' "- Следовательно, почему я думал, что он хранит массив! Какие-либо предложения?
добавлено автор Zulu Irminger, источник
Это будет целое число. 1, например.
добавлено автор Zulu Irminger, источник
phpGeeks
phpGeeks
3 620 участник(ов)

Best PHP chat Еще: @dbGeeks - базы данных @phpGeeksJunior - новичкам @moscowProgers - IT Москва @ebanoePhp - весёлый канал о PHP @laravel_pro - Laravel @jobGeeks - вакансии @jsChat - JS Правила: https://t.me/phpGeeks/764859 ДР - 28.03.2016

DBA - русскоговорящее сообщество
DBA - русскоговорящее сообщество
1 345 участник(ов)

Общаемся и обсуждаем темы, посвященные DBA, PostgreSQL, Redis, MongoDB, MySQL, neo4j, riak и т.д. См. также: @devops_ru, @kubernetes_ru, @docker_ru, @nodejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание здесь было полезным и комфортным.

PHP
PHP
1 309 участник(ов)

Группа про современный PHP. Обсуждаем ООП, TDD, BDD, DDD, SOLID, GRASP и прочие крутые базворды Для ознакомления: https://gist.github.com/mkusher/711bd46f0b62fbae851182e6fb3b1839 Группа PHP для новичков @phpGeeksJunior Вакансии: https://t.me/fordev

PHP — вакансии, поиск работы и аналитика
PHP — вакансии, поиск работы и аналитика
1 251 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению PHP, Laravel, Symfony, Yii и т.д. Здесь всё: full-time, part-time, remote и разовые подработки. См. также: @qa_jobs, @devops_jobs, @javascript_jobs, @nodejs_jobs, @uiux_jobs, @products_jobs

MySQL
MySQL
995 участник(ов)

The group is about MySQL. For code use hastebin.com. Admin: @smlkw

phpGeeksJunior
phpGeeksJunior
980 участник(ов)

Группа для новичков. Не стесняйтесь задавать вопросы по php. Не флудить!!!! Правила и полезные ссылки https://gist.github.com/exileed/a53dd0617b35a705ff44b38c8028e6a5 Бест от пхпгикс https://t.me/best_of_phpgeeks

SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

phpclub.ru
phpclub.ru
872 участник(ов)

Официальный чат phpclub.ru - остерегайтесь подделок #rules Правила группы - уважайте друг друга. Скриншоты -> ссылками. Код -> pastebin.com. Вакансии строго -> https://goo.gl/4bNxym, в чат ссылку. За рекламу и мат - БАН!

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)

Devall | PHP
Devall | PHP
272 участник(ов)

Пристанище для восходящих звёзд разработки, которые перейдут на более адекватные языки. http://combot.org/chat/-1001014863761 Инвайт: j.mp/devallphp