За один раз возвращается только один товар. Когда в продукте есть ингредиент, мой код работает как задумано. Когда это не так, я получаю:
Неопределенное смещение: 0
Который ссылается на строку кода: if ($response_decoded['products'][0]['ingredients'] != null){
Я понимаю, что это потому, что нет ингредиента, но будут времена, когда это так, это неизбежно.
Итак, на данный момент:
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setBody("{body}");
try
{
$response = $request->send();
$result = $response->getBody();
$response_decoded = json_decode($result,true);
print_r($response_decoded);
…Я возвращаюсь:
Array ( [products] => Array ( [0] => Array ( [gtin] => 05052909299653 [tpnb] => 065738756 [tpnc] => 272043262 [description] => Tesco Lemon And Lime Zero 2L [brand] => TESCO [qtyContents] => Array ( [quantity] => 2000 [totalQuantity] => 2000 [quantityUom] => ml [netContents] => 2L e ) [productCharacteristics] => Array ( [isFood] => [isDrink] => 1 [healthScore] => 70 [isHazardous] => [storageType] => Ambient [isNonLiquidAnalgesic] => [containsLoperamide] => ) [ingredients] => Array ( [0] => Carbonated Water [1] => Citric Acid [2] =>
И так далее…
Я тогда делаю:
// check for ingredient array
if ($response_decoded['products'][0]['ingredients'] != null){
// can now target ingredient array
$ingredients = $response_decoded['products'][0]['ingredients'];
Так что, а не просто != null
Я считаю, что мне нужно заранее проверить, существуют ли «ингредиенты». Я хотя я мог бы использовать array_key_exists
сделать это.
if (array_key_exists('products', $response_decoded)) {
echo "Product is there";
}
else{
echo "Product is not there";
}
Теперь, когда это работает, оно говорит мне, существует ли продукт … Но как проверить, существует ли ингредиент для продукта?
Если вы используете PHP 7+, вам не нужно проверять каждое измерение массива — вы можете использовать оператор null coalesce ??
на последнем элементе:
if ($response_decoded['products'][0]['ingredients'] ?? null !== null) {
// ingredients exist
}
Если значение существует и не равно нулю, вы попадете в условие. Если какой-либо части массива не существует, он потерпит неудачу, но не будет жаловаться на предупреждения о неопределенных индексах.
Других решений пока нет …