【问题标题】:Php $_GET issuePHP $_GET 问题
【发布时间】:2010-09-10 04:22:48
【问题描述】:
foreach ($_GET as $field => $label)
{
   $datarray[]=$_GET[$field];
   echo "$_GET[$field]";
   echo "<br>";
}
print_r($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 
                 ) 
)

【问题讨论】:

  • 请编辑此问题的标题,使其更具描述性。
  • 更好地格式化您的问题,以便人们更好地理解它并提供更快的答案。使用 Markdown 甚至是编辑字段上方的按钮。
  • 如果您向我们展示给出如此奇怪 $_GET 的链接,我想我们可以理解更多
  • 包含您尝试通过 $_GET 读取的实际 URL 查询也会很有帮助。
  • 这里是链接让我知道是否有帮助hofstrateach.org/Roberto/story_1.html

标签: php arrays printing foreach get


【解决方案1】:

print_r之前使用&lt;pre&gt;标签,然后你会打印出一棵树(或者只看源代码。从这一点你将清楚地了解你的数组是如何并且能够拉取值你想要的。

我建议进一步阅读$_GET 变量和arrays,以便更好地理解其值

【讨论】:

  • 这是我得到的警告:在第 27 行的 /home/public_html/process.php 中为 foreach() 提供的参数无效
【解决方案2】:

也许 GET 变量本身就是数组?即http://site.com?var[]=1&var[]=2

【讨论】:

    【解决方案3】:

    在数组上调用 echo 将始终输出“Array”。 print_r(来自 PHP 手册)打印关于变量的人类可读信息。

    【讨论】:

      【解决方案4】:

      看起来您的 GET 参数本身就是一个数组。有输入和输出会很有帮助。

      【讨论】:

        【解决方案5】:

        使用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"
        

        【讨论】:

        • 他没有嵌套数组;第一个Array是echo "$_GET[$field]"的输出,第二个是print_r($datarray)的输出;
        【解决方案6】:

        编辑:当我完成你的测试时,这是最终的 URL:

        http://hofstrateach.org/Roberto/process.php?keys=Grade1&keys=Nathan&keys=North%20America&keys=5&keys=3&keys=no&keys=foo&keys=blat&keys=0%3A0%3A24

        这可能是一个格式错误的 URL。当您在查询中传递重复键时,PHP 会将它们变成一个数组。上面的 URL 应该是这样的:

        http://hofstrateach.org/Roberto/process.php?grade=Grade1&schoolname=Nathan&region=North%20America&answer[]=5&answer[]=3&answer[]=no&answer[]=foo&answer[]=blat&time=0%3A0%3A24

        这将为大多数字段创建单独的条目,并使 $_GET['answer'] 成为用户提供的答案的数组。

        底线:修复您的 Flash 文件。

        【讨论】:

        • PHP 只有在键的末尾有 [] 时才会将键放入数组中;否则它只会用最后指定的值覆盖重复键。
        【解决方案7】:

        试试这个:

        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);
        

        【讨论】:

          【解决方案8】:

          它只是打印“数组”,因为当你说

           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.
          

          问题不在于您的 Flash 文件,请将其改回原来的样子;您知道这是正确的,因为您的 $dataarray 变量包含所有数据。为什么要从$_GET 中提取数据到另一个数组中?

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-03-22
            • 2011-06-07
            • 1970-01-01
            相关资源
            最近更新 更多