【问题标题】:PHP: Getting warning if $_GET is emptyPHP:如果 $_GET 为空,则会收到警告
【发布时间】:2011-07-11 06:43:55
【问题描述】:

我得到这样的数组数据:

$tags = $_GET['item']['tags'];  

if ($tags){
    foreach ($tags as $tag){

由于标签数据是从输入字段发送的,该字段也可以为空。因此,如果$tags 没有得到任何数据,我会收到以下通知:

Message: Undefined index: item

如何避免此通知?

如果我试试这个:

$tags = isset($_GET['item']['tags']);

如果$tags 没有得到任何数据,它不会显示任何警告,但如果它得到任何数据,那么我会收到以下警告:

Message: Invalid argument supplied for foreach()

我该怎么做才能让$tags得到任何数据然后转到foreach循环,否则不要发出任何通知它没有得到任何数据。

谢谢。

【问题讨论】:

  • var_dump($tags)它获取任何数据时会给你什么? Array(...)String "..."?
  • var_dump 返回数组:array(3) { [0]=> string(3) "abc" [1]=> string(3) "def" [2]=> string(3) "ghi" }
  • 啊...$tags = isset(...) 表示$tags 变为truefalse,您无法将其传递给foreach。 Eddie 的回答回答了您需要做的事情。

标签: php arrays get


【解决方案1】:

你需要这样做:

$tags = isset($_GET['item']['tags']) ? $_GET['item']['tags'] :'';

【讨论】:

  • 他仍然需要在循环之前检查 $tags 是否为空。
  • 我认识这个符号,但不知道。你能解释一下吗?
  • 感谢@Eddie。这是一个简单的例子的简洁解释。
  • @Eddie 我建议脚本分配'',而不是分配array()。这样,就无需检查空字符串,foreach 循环将简单地运行零次。
【解决方案2】:

试试这个:

if( !is_null( $_GET["item"]["tags"] ) )
{
    $tags = $_GET["item"]["tags"];
    foreach($tags as $tag)
    {
        //do stuff here
    }
}

另外,您在问题中说您正在发布数据,但您使用 $_GET 来检索您的变量。这也可能是个问题。

【讨论】:

  • 这是不正确的,因为 $_GET["item"] 部分将返回 null 而 null["tags"] 正是引发警告的原因。
  • 把它改成 !is_null($_GET["item"]["tags"]) 能解决这个问题吗?
【解决方案3】:

好吧,如果你只是想关闭错误显示,这很容易,只需修改 php.ini 以不显示错误...

然后当我调试时,我用它来确保我能看到那些错误......

$debug = 1;
if($debug){
    error_reporting(E_ALL);
    ini_set('display_errors', '1');
}

每当您运行 foreach 循环时,您都需要对数组进行计数

$array = array();
if(count($array) > 0){
    foreach($array as $key=>$value){
         //Stuff here...
    }
}

在你的情况下,把它改成这样:

$tags = $_GET['item']['tags'];  

//TAGS MUST BE AN OBJECT OR AN ARRAY....

if (count($tags) > 0){
    foreach($tags as $tag){
       //....Code here.
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多