2017-05-10 3 views
2

J'ai lu les autres questions, aucune n'a répondu ni m'a aidé.PHP: Index indéfini même après avoir vérifié IsSet

Voici mon problème, j'ai un objet/tableau qui contient une propriété qui est aussi un objet/tableau.

J'ai réussi à accéder des propriétés similaires avant via:

$variable[propertyObject][property] 

Cependant, je reçois l'erreur Notice: Undefined index ces derniers temps.

Voici le code:

$extensionData = $data['Data']; 
echo '<p>' . isset($extensionData['Calories']) ? $extensionData['Calories'] : '' . '</p>'; 

Cependant, cela jette toujours la même erreur. Même lorsque je vérifie:

isset($extensionData['Calories']), il résout toujours à 1/True ce qui signifie que la propriété doit exister, alors comment l'indice peut-il être indéfini?

Et quand je fais un var_dump ou print_r de $extensionData, voici ce que je reçois:

Array 
(
    [Calories] => 295 
    [WebDesktopImage] => https://clutch-asset-management.s3.amazonaws.com/elevation-burger/IMG_0760-Edit.jpg 
    [WebMobileImage] => https://clutch-asset-management.s3.amazonaws.com/elevation-burger/IMG_0760-Edit.jpg 
    [WebDescription] => BLT image 
) 
+3

Mettez '(parenthèses)' autour de votre opération ternaire. C'est probablement en train de tout chambouler. –

+0

@NiettheDarkAbsol merci, mais cela n'a pas fonctionné, le pire, c'est qu'il passe isset, mais dit soudainement que c'est un indice indéfini – AnimaSola

+0

Est-ce en boucle? Essayez d'écrire 'isset ($ extensionData ['Calories']) var_dump ($ extensionData ['Calories']);' avant l'instruction 'echo'. – gaganshera

Répondre

0

ternaires

isset($extensionData['Calories']) ? $extensionData['Calories'] : '' 

est OK quand il est utilisé comme ceci:

echo isset($extensionData['Calories']) ? $extensionData['Calories'] : ''; 
$tmp_var = isset($extensionData['Calories']) ? $extensionData['Calories'] : ''; 
return isset($extensionData['Calories']) ? $extensionData['Calories'] : ''; 

mais, lorsqu'il est utilisé dans la concaténation de chaînes, alors vous devriez opter pour des parenthèses afin de limiter la portée de la comparaison

echo '<p>' . (isset($extensionData['Calories']) ? $extensionData['Calories'] : '') . '</p>'; 

Faire

echo '<p>' . isset($extensionData['Calories']) ? $extensionData['Calories'] : '' . '</p>'; 

est équivalent à

if('<p>' . isset($extensionData['Calories'])) 
{ 
    echo $extensionData['Calories']; // Produces Undefined index error 
} 
else 
{ 
    echo '' . '</p>'; 
} 
0

Le code suivant évaluera True et donc votre requête isset() est niée:

echo '<p>' . isset($extensionData['Calories']) 

Cela retournera True car la chaîne '<p>' est vraie.

Essayez ceci:

echo '<p>' . (isset($extensionData['Calories']) ? $extensionData['Calories'] : '') . '</p>'; 
0

Les problèmes sont dans votre opération ternaire. Votre isset() avec l'opérateur ternaire est un bitty désordonné, vous ne définissez pas la portée lors de la concaténation avec une chaîne. Vous devez ajouter des parenthèses à votre opération ternaire et isoler la chaîne de l'opération.La déclaration if votre code est le même que

if('<p>'. isset($extensionData['Calorie'])) 
{ 
    echo $extensionData[´Calorie´]; 
} 
else 
{ 
    echo ''.'</p>'; 
} 

Je vous recommande de le mettre dans une variable afin d'organiser votre code mieux

$extensionData = $data['Data']; 
$varCalorie = (isset($extensionData['Calories']) ? $extensionData['Calories'] : ''); 
echo '<p>'. $varCalorie . '<p/>'; 

Le ci-dessus serait identique à

if (isset($extensionData['Calories'])) { 
    $varCalorie = $extensionData['Calories']; 
    echo '<p>'. $varCalorie . '<p/>'; 
} else { 
    $varCalorie = ''; 
    echo '<p>'. $varCalorie . '<p/>'; 
} 

Vous pouvez également faire

echo isset($extensionData['Calories']) ? $extensionData['Calories'] : ''; 
return isset($extensionData['Calories']) ? $extensionData['Calories'] : '';