Недопустимый аргумент для foreach () – API поиска Bing

Это код php:

<?php $acctKey = 'key'; $rootUri = 'https://api.datamarket.azure.com/Bing/Search'; $contents = file_get_contents('bing_basic.html'); if ($_POST['query']) { $query = urlencode("'{$_POST['query']}'"); $serviceOp = $_POST['service_op']; $requestUri = "$rootUri/$serviceOp?\$format=json&Query=$query"; $auth = base64_encode("$acctKey:$acctKey"); $data = array('http' => array('request_fulluri' => true,'ignore_errors' => true,'header' => "Authorization: Basic $auth")); $context = stream_context_create($data); $response = file_get_contents($requestUri, 0, $context); $jsonObj = json_decode($response); $resultStr = ''; foreach($jsonObj->d->results as $value) { switch ($value->__metadata->type) { case 'WebResult': $resultStr .= "<a href=\"{$value->Url}\">{$value->Title}</a><p>{$value->Description}</p>"; break; case 'ImageResult': $resultStr .= "<h4>{$value->Title} ({$value->Width}x{$value->Height}) " . "{$value->FileSize} bytes)</h4>" . "<a href=\"{$value->MediaUrl}\">" . "<img src=\"{$value->Thumbnail->MediaUrl}\"></a><br />"; break; } } $contents = str_replace('{RESULTS}', $resultStr, $contents); } echo $contents; ?> 

И это html:

 <html> <head> <title>Bing Search Tester (Basic)</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <h1>Bing Search Tester (Basic)</h1> <form method="POST" action="bing_basic.php"> <label for="service_op">Service Operation</label><br/> <input name="service_op" type="radio" value="Web" CHECKED /> Web <input name="service_op" type="radio" value="Image" /> Image <br/> <label for="query">Query</label><br/> <input name="query" type="text" size="60" maxlength="60" value="" /><br /><br /> <input name="bt_search" type="submit" value="Search" /> </form> <h2>Results</h2> {RESULTS} </body> </html> 

Почему я продолжаю получать эту ошибку? Кстати, это дубликат, но в других вопросах не было всего кода и ответов на мой вопрос не было.

Кроме того, я не очень хорошо знаком с php-объектами и json.

Документация Api: https://onedrive.live.com/view.aspx?resid=9C9479871FBFA822!112&app=Word&authkey=!ANNnJQREB0kDC04

Двойная проверка, чтобы гарантировать, что результаты $ jsonObj-> d-> действительно представляют собой массив или что он не пуст.

 if( ( is_array( $jsonObj->d->results ) && ( ! empty( $jsonObj->d->results ) ) { foreach($jsonObj->d->results as $value) { switch ($value->__metadata->type) { case 'WebResult': $resultStr .= "<a href=\"{$value->Url}\">{$value->Title}</a><p>{$value->Description}</p>"; break; case 'ImageResult': $resultStr .= "<h4>{$value->Title} ({$value->Width}x{$value->Height}) " . "{$value->FileSize} bytes)</h4>" . "<a href=\"{$value->MediaUrl}\">" . "<img src=\"{$value->Thumbnail->MediaUrl}\"></a><br />"; break; } } } else { if( ! is_array( $jsonObj->d->results ) { echo "jsonObj->d->results is not an array!"; } elseif( empty( $jsonObj->d->results ) { echo "jsonObj->d->results is empty!"; } }