Проверьте, существует ли массив внутри массива в переполнении стека

За один раз возвращается только один товар. Когда в продукте есть ингредиент, мой код работает как задумано. Когда это не так, я получаю:

Неопределенное смещение: 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";

}

Теперь, когда это работает, оно говорит мне, существует ли продукт … Но как проверить, существует ли ингредиент для продукта?

0

Решение

Если вы используете PHP 7+, вам не нужно проверять каждое измерение массива — вы можете использовать оператор null coalesce ?? на последнем элементе:

if ($response_decoded['products'][0]['ingredients'] ?? null !== null) {
// ingredients exist
}

Если значение существует и не равно нулю, вы попадете в условие. Если какой-либо части массива не существует, он потерпит неудачу, но не будет жаловаться на предупреждения о неопределенных индексах.

1

Другие решения

Других решений пока нет …