0

I am retrieving data from a JSON file, where I am grabbing reviews of places and posting those reviews.

Some of the places don't have any reviews, so when I try to grab them, I am receiving null.

I tried to fix this problem with an if Statement:

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

This is the full code:

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>'; 
      }
   }

To me this solution should work, however it still throws the null error.

I also tried a 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!';
  }

This is my error message:

Fatal error: Uncaught TypeError: count(): Argument #1 ($var) must be of type Countable|array, null given
Codekid
  • 53
  • 5
  • 1
    `$json_reviews['result']['reviews']` is null, so `count($json_reviews['result']['reviews'])` is essentially `count(null)` which throws the error above. You're looking for `if (!isset($json_reviews['result']['reviews'])) { ...` – WOUNDEDStevenJones Mar 19 '21 at 19:28

1 Answers1

1

You should check if they exist then you can iterate over them even if they are empty:

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

If you want to output an error in case there is no review available:

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>'; 
      }
   }
Amir MB
  • 3,233
  • 2
  • 10
  • 16