Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
确定php中的空数组_Php_Arrays - Fatal编程技术网

确定php中的空数组

确定php中的空数组,php,arrays,Php,Arrays,您好,我正在为一家餐厅的android应用程序开发一个管理后端。我需要列出餐厅提供的所有食物种类。问题是有些类别下可能没有列出任何项目,如果遇到这样的类别,php后端应该只返回一个空列表,但类别名称应该在那里 我目前的代码 try { $query = "SELECT category FROM category"; $result= $DBH->query($query); while($row = $result-&

您好,我正在为一家餐厅的android应用程序开发一个管理后端。我需要列出餐厅提供的所有食物种类。问题是有些类别下可能没有列出任何项目,如果遇到这样的类别,php后端应该只返回一个空列表,但类别名称应该在那里

我目前的代码

try
    {
        $query = "SELECT category FROM category";       
        $result= $DBH->query($query);
        while($row = $result->fetch(PDO::FETCH_ASSOC))
        {
            $cat    = $row['category'];
            $query1 = "SELECT * FROM item WHERE catagory='$cat'";       
            $value  = $DBH->query($query1);
            $row1   = $value->fetch(PDO::FETCH_OBJ);
            $main   = array('data'=>array($row1));
            echo json_encode($main);
        }

        $result->closeCursor();         //Close database connection free resources
        $DBH = null;
    }
    catch(PDOException $e){
        print $e->getMessage ();
        die();
    }
给出如下输出

{"data":[{"id":"2","name":"Rice","price":"120","description":"Plain Rice","image":"6990_abstract-photo-2.jpg","time":"12 mins","catagory":"Lunch","subcat":""}]}
{"data":[{"id":"4","name":"Dal","price":"5","description":"dadadad","image":"","time":"20 mins","catagory":"Dinner","subcat":""}]}
{"data":[false]}
我的问题是最后一个显示
{“data”:[false]}
的输出应该是这样的
{“data”:[“catagory”:“Soup”]}
要做到这一点,我需要找出
$main
变量何时为空,然后手动将类别添加到其中


有什么想法或解决办法吗?

您的问题源于这样一个事实,即您有一个“汤”类别,但您没有属于汤类别的任何项目。您应该为空结果添加一个条件,并相应地更改回显数组

  if (empty($row1))
  {
   $main   = array('data'=>array('category'=>$cat));
  }
   else 
  {
    $main   = array('data'=>array($row1));
  }

您需要此修改

if ($row1   = $value->fetch(PDO::FETCH_OBJ)){
  $main   = array('data'=>array($row1));
  echo json_encode($main);
}else{
  echo '{"data":["catagory":"' . $row['category'] . '"]}';
}

难道你不能检查$main是否为空,然后在调用json_eoncode()之前添加默认值吗?对我来说真的很简单。我不确定问题出在哪里。我尝试使用if(empty($main)),它总是返回false,即使第三次它是空的。您应该对$main执行var_dump()并查看它的外观。这显然不是你所想的。var_dump()显示第三次值是array(1){[“data”]=>array(1){[0]=>bool(false)}}你能建议我如何使用它来编写逻辑以满足我的需要吗?我正在尝试这样做,但我很困惑,因为我无法检测它何时为空。如果你能给出一个条件的例子来找出空的结果,那就太好了