2017-05-10 2 views
2

Ich habe die anderen Fragen gelesen, keiner hat mir geantwortet oder geholfen.PHP: Undefinierter Index auch nach Überprüfung von IsSet

Hier ist mein Problem, ich habe ein Objekt/Array, das eine Eigenschaft enthält, die auch ein Objekt/Array ist.

ich erfolgreich ähnliche Objekte zugegriffen haben, bevor sie über:

$variable[propertyObject][property] 

Allerdings habe ich den Fehler Hinweis wurde empfangen: Undefined index in letzter Zeit. Hier

ist der Code:

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

jedoch, die immer noch den gleichen Fehler auslöst. Auch wenn ich überprüfe:

isset($extensionData['Calories']), löst es immer auf 1/True, was bedeutet, dass die Eigenschaft existieren sollte, so wie kann der Index undefiniert sein?

Und wenn ich einen var_dump oder print_r von $extensionData tun, das ist, was ich bekommen:

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

Setzen Sie '(Klammern)' um Ihre ternäre Operation. Es wird wahrscheinlich Dinge herumspielen. –

+0

@NiettheDarkAbsol danke, aber das hat nicht funktioniert, der schlimmste Teil ist, dass es passiert, aber dann sagt plötzlich, es ist ein undefinierter Index – AnimaSola

+0

Ist das in einer Schleife? Versuchen Sie 'isset ($ extensionData ['Calories']) zu schreiben var_dump ($ extensionData ['Calories']);' vor der 'echo' Anweisung. – gaganshera

Antwort

0

Ternary

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

ist OK, wenn wie folgt verwendet:

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

Bei der Verkettung von Zeichenfolgen sollten Sie jedoch Klammern setzen, um den Bereich einzuschränken des Vergleichs

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

Doing

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

entspricht

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

Der folgende Code auf True und damit Ihre isset auswertet() Abfrage negiert wird:

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

Dies gibt True zurück, da die Zeichenfolge '<p>' wahr ist.

Versuchen Sie folgendes:

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

Die Probleme in Ihrem ternären Betrieb ist. Ihr isset() mit ternären Operator ist ein bisschen unordentlich, Sie definieren nicht den Bereich beim Verketten mit einer Zeichenfolge. Sie müssen der ternären Operation Klammern hinzufügen und die Zeichenfolge von der Operation isolieren.Die if Anweisung für Ihren Code ist der gleiche wie

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

Ich empfehle Sie es, um in einer Variablen setzen Sie Ihren Code besser

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

Die oben identisch sein

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

können Sie tun auch

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