配列-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
)
答え :
解決策:
三項式:
isset($extensionData['Calories']) ? $extensionData['Calories'] : ''
次のようにスタンドアロンで使用する場合は問題ありません:
echo isset($extensionData['Calories']) ? $extensionData['Calories'] : '';
$ tmp_var = isset($extensionData['Calories']) ? $extensionData['Calories'] : '';
isset($extensionData['Calories']) ? $extensionData['Calories'] : ''を返す;
予想と同等であるため:
if(isset($extensionData['Calories']))
{
// use $extensionData['Calories']
}
else
{
// use empty string ''
}
ただし、文字列の連結で使用する場合は、先頭の文字列が比較の一部にならないように、比較の範囲を制限するために括弧が必要です。
echo''。 (isset($extensionData['Calories']) ? $extensionData['Calories'] : '')。 '';
実行(間違った方法):
echo''。 isset($extensionData['Calories']) ? $extensionData['Calories'] : ''。 '';
は
と同等です
if('<p>' . isset($extensionData['Calories'])) // The leading string is used in the comparison and the result of isset() (boolean) is appended to the string so 100% of the time this example will be true because of how loose comparisons work
{
echo $extensionData['Calories']; // Produces Undefined index error
}
else
{
echo '' . '</p>';
}
結論:
疑問がある場合は、括弧を追加してください。
疑わしい場合は、とにかく括弧を追加してください。これは、6か月後にコードに再度アクセスする必要がある場合に、コードが読みやすくなるためです。ほとんどのテキストエディタには括弧と角かっこ一致の強調表示があるため、括弧を追加することは、操作の意図された動作を宣言し、後で確認するための非常に有益な方法です。
誰かの不可解なコードに出くわし、何が起こっているのかを理解するのに助けが必要な場合は、演算子の優先順位を参照してください彼らが考えていた、および/または考慮しなかった地球。
答え :
解決策:
次のコードはTrueと評価されるため、isset()クエリは無効になります:
echo '<p>' . isset($extensionData['Calories'])
文字列'
'がtrueであるため、これはTrueを返します。
これを試してください:
echo '<p>' . ( isset($extensionData['Calories']) ? $extensionData['Calories'] : '' ) . '</p>';
答え :
解決策:
問題は三項演算子にあります。三項演算子を使用したisset()は少し面倒です。文字列と連結するときに、スコープを定義していません。三項演算に括弧を追加し、文字列を演算から分離する必要があります。コードの
if
ステートメントは
if(''。isset($ extensionData ['Calorie']))
{{
エコー$extensionData[´Calorie´];
}
そうしないと
{{
エコー''。'
';
}
コードをより適切に整理するために、変数に入れることをお勧めします
$extensionData = $data['Data'];
$varCalorie = (isset($extensionData['Calories']) ? $extensionData['Calories'] : '');
echo '<p>'. $varCalorie . '<p/>';
上記は
と同じです
if(isset($ extensionData ['Calories'])){
$ varCalorie = $ extensionData ['Calories'];
エコー''。 $varCalorie。 '
';
} そうしないと {
$ varCalorie ='';
エコー''。 $varCalorie。 '
';
}
あなたもできます
echo isset($extensionData['Calories']) ? $extensionData['Calories'] : '';
return isset($extensionData['Calories']) ? $extensionData['Calories'] : '';
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。