Проблема с PHP $_GET
Вопрос
foreach ($_GET as $field => $label)
{
$datarray[]=$_GET[$field];
echo "$_GET[$field]";
echo "<br>";
}
print_r($datarray);
Это результат, который я получаю.Я вижу, что данные есть в Datarray, но когда я echo $_GET[$field]
Я получаю только «Массив»
Но print_r($datarray)
печатает все данные.Есть идеи, как мне получить эти значения?
ВЫХОД
Array (
[0] => Array (
[0] => Grade1
[1] => ln
[2] => North America
[3] => yuiyyu
[4] => iuy
[5] => uiyui
[6] => yui
[7] => uiy
[8] => 0:0:5
)
)
Решение
РЕДАКТИРОВАТЬ:Когда я завершил ваш тест, вот конечный URL:
Вероятно, это неверный URL-адрес.Когда вы передаете в запросе повторяющиеся ключи, PHP преобразует их в массив.Вероятно, приведенный выше URL-адрес должен выглядеть примерно так:
Это создаст отдельные записи для большинства полей и сделает $_GET['ответ'] массивом ответов, предоставленных пользователем.
Нижняя граница:исправьте свой Flash-файл.
Другие советы
Использовать var_export($_GET)
чтобы легче увидеть, какой массив вы получаете.
Из результатов вашего скрипта я вижу, что у вас есть несколько вложенных массивов.Кажется, это что-то вроде:
$_GET = array( array( array("Grade1", "ln", "North America", "yuiyyu", "iuy", "uiyui", "yui","uiy","0:0:5")))
поэтому, чтобы получить эти переменные, вам нужно что-то вроде:
echo $_GET[0][0][0]; // => "Grade1"
вызов echo для массива всегда будет выводить «Array».print_r (из руководства PHP) печатает удобочитаемую информацию о переменной.
Использовать <pre>
теги перед print_r
, тогда у вас будет напечатано дерево (или просто посмотрите исходный код.С этого момента у вас будет четкое представление о том, как устроен ваш массив, и вы сможете получить нужное значение.
Предлагаю продолжить чтение $_GET
переменная и массивы, для лучшего понимания его значений
Попробуй это:
foreach ($_GET as $field => $label)
{
$datarray[]=$_GET[$field];
echo $_GET[$field]; // you don't really need quotes
echo "With quotes: {$_GET[$field]}"; // but if you want to use them
echo $field; // this is really the same thing as echo $_GET[$field], so
if($label == $_GET[$field]) {
echo "Should always be true<br>";
}
echo "<br>";
}
print_r($datarray);
Он печатает просто «Массив», потому что, когда вы говорите
echo "$_GET[$field]";
PHP не может знать, что вы имеете в виду $_GET
элемент $field
, он видит это так, как будто вы хотите напечатать переменную $_GET
.Итак, он пытается его напечатать, и, конечно, это массив, вот что вы получаете.Обычно, когда вы хотите отобразить элемент массива, вы делаете это следующим образом:
echo "The foo element of get is: {$_GET['foo']}";
Фигурные скобки сообщают PHP, что все это переменная, которую необходимо интерпретировать;в противном случае будет считаться, что имя переменной $_GET
само собой.
В вашем случае, хотя вам это не нужно, вам нужно:
foreach ($_GET as $field => $label)
{
$datarray[] = $label;
}
и если вы хотите его распечатать, просто сделайте
echo $label; // or $_GET[$field], but that's kind of pointless.
Проблема была не в вашем прошивочном файле, измените его обратно на прежний;вы знаете, что это правильно, потому что ваша переменная $dataarray содержит все данные.Почему вы хотите извлечь данные из $_GET
все равно в другой массив?
Возможно, переменные GET сами являются массивами?то есть http://site.com?var[]=1&var[]=2
Похоже, ваш аргумент GET сам по себе является массивом.Было бы полезно иметь как входные данные, так и выходные данные.