PHP 错误:尝试访问类型为 null 的值的数组偏移量

问题描述

我正在从 JSON 文件中检索数据,我在其中抓取地点评论并发布这些评论

有些地方没有任何评论,所以当我尝试抓取它们时,我收到的是 null。

我试图用 if 语句解决这个问题:

if ($reviewNum = count($json_reviews['result']['reviews']) == null)

这是完整的代码

if ($reviewNum = count($json_reviews['result']['reviews']) == null){
    echo 'No Reviews!';
}
else{
   for ($i = 0; $i < count($json_reviews['result']['reviews']); $i++){
      echo '<b>' . $json_reviews['result']['reviews'][$i]['author_name'] . '</b><br>';
      echo '"' . $json_reviews['result']['reviews'][$i]['text'] . '"' . '<br>'; 
      }
   }

对我来说这个解决方案应该有效,但它仍然会抛出空错误

我也尝试了一个 try catch :

try{
  for ($i = 0; $i < count($json_reviews['result']['reviews']); $i++){
     echo '<b>' . $json_reviews['result']['reviews'][$i]['author_name'] . '</b><br>';
     echo '"' . $json_reviews['result']['reviews'][$i]['text'] . '"' . '<br>'; 
     }
  }
catch(Exception $e){
  echo 'No reviews!';
  }

这是我的错误信息:

Fatal error: Uncaught TypeError: count(): Argument #1 ($var) must be of type Countable|array,null given

解决方法

您应该检查它们是否存在,然后即使它们为空也可以迭代它们:

for ($i = 0; isset($json_reviews['result']['reviews']) && $i < count($json_reviews['result']['reviews']); $i++) {    
}

如果您想在没有可用评论的情况下输出错误:

if (!isset($json_reviews['result']['reviews']) || count($json_reviews['result']['reviews']) === 0){
    echo 'No Reviews!';
}
else{
   for ($i = 0; $i < count($json_reviews['result']['reviews']); $i++){
      echo '<b>' . $json_reviews['result']['reviews'][$i]['author_name'] . '</b><br>';
      echo '"' . $json_reviews['result']['reviews'][$i]['text'] . '"' . '<br>'; 
      }
   }