2017-05-10 15 views
2

私は他の質問を読んだことがあります。PHP:IsSetをチェックしても未定義のインデックス

ここに私の問題ですが、オブジェクト/配列でもあるプロパティを含むオブジェクト/配列があります。

私が正常に経由する前に、同様の特性をアクセスした

:最近未定義のインデックス:

$variable[propertyObject][property] 

しかし、私はエラー通知を受けてきました。ここで

は、コードは次のとおりです。

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

しかし、それはまだ同じエラーがスローされます。

isset($extensionData['Calories'])をチェックしても、常にプロパティが存在するはずであることを意味する1/Trueに解決されるため、インデックスはどのように定義されないのですか?

そして、私は$extensionDataののvar_dumpまたはますprint_rを行うとき、これは私が得るものである。このように使用する場合

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

三項演算の前後に '(括弧)'を入れます。おそらく、物事を乱すだろう。 –

+0

@NiettheDarkAbsolありがとう、しかしそれはうまくいきませんでした、最悪の部分は、それがissetを渡すが、突然それは未定義のインデックスだと言います – AnimaSola

+0

これはループですか? 'echo'文の前に' isset($ extensionData ['Calories'])var_dump($ extensionData ['Calories']);を書いてみてください。 – gaganshera

答えて

0

三元

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

はOKです:

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

しかし、文字列の連結で使用する場合は、範囲を限定するために括弧を使用する必要があります比較

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

を行う

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

の次のコードがTrueと評価されますので、あなたのISSET()クエリが否定された

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

に相当します。

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

文字列 '<p>'が真であるため、Trueを返します。

はこれを試してみてください:

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

の問題は、あなたの三項演算です。 isset()と3項演算子はちょっと混乱しますが、文字列と連結するときには範囲を定義していません。三項演算に括弧を追加し、その演算から文字列を分離する必要があります。あなたのコードのためのif声明

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

と同じである私は、より良いあなたのコードを整理するために、変数にそれを置くためにあなたをreccomend

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

上記は

if (isset($extensionData['Calories'])) { 
    $varCalorie = $extensionData['Calories']; 
    echo '<p>'. $varCalorie . '<p/>'; 
} else { 
    $varCalorie = ''; 
    echo '<p>'. $varCalorie . '<p/>'; 
} 
と同一であります

でも可能です

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