これは PHP でよくある問題で、ファイルをインクルードすると変数に関する不確実性が生じる可能性があります。
私にとってうまくいく2つのアプローチがあります。
デフォルトの割り当て
デフォルトの割り当てでは、キーが存在しない場合に $var 変数にデフォルト値が与えられます。
$var = isset($dayMarks[$res['resId']][$dDate]) ? $dayMarks[$res['resId']][$dDate]: false;
このコードの後、$var には常に有効な値が含まれると想定できます。
デフォルトの合併
私の好みの方法は、必要なすべての値とそのデフォルト値を含むデフォルト配列を常に宣言することです。False 値を使用して、値が欠落している可能性のあるキーをマークします (キーがブール値以外の別の値の型を保持していると仮定します)。
$default = array(
'date'=>false,
'name'=>'John Doe'
);
$dayMarks[$res['resId']] = array_merge($default, $dayMarks[$res['resId']]);
これにより、その変数に必要なキーが存在することが保証され、少なくともデフォルト値が保持されます。
日付が存在するかどうかをテストできるようになりました。
if($dayMarks[$res['resId']]['date'] !== false)
{
// has a date value
}
これは、アレイに対して正確に機能しない場合があります。テーブル構造のように見えるので。名前付きのキーと値のペアに切り替えることには利点があります。これにより、その配列にデフォルト値を簡単に割り当てることができるようになります。
編集:
実際の問題は、JavaScript コードを再現できるかどうかでした。
if (var=$dayMarks[$re...)
はい、これはヘルパー関数を使用して実行できます。
注:このトリックは、非ブール型でのみ使用する必要があります。
function _isset($arr,$key)
{
return isset($arr[$key]) ? $arr[$key] : false;
}
$a = array('zzzz'=>'hello');
if(($b = _isset($a,'test')) !== false)
{
echo $b;
}
if(($c = _isset($a,'zzzz')) !== false)
{
echo $c;
}
上記のコードはこちら