1

私のコード:

if (isset($dayMarks[$res['resId']][$dDate])) {
     $var=$dayMarks[$res['resId']][$dDate];
     echo $var;
}

isset条件は、$ varに割り当てられた値と同じであることに注意してください。これにより、かなり醜いコードが作成されます。

条件を繰り返さずに$varに割り当てるにはどうすればよいですか?

(javascriptでは、私は書きますif (var=$dayMarks[$re...)

4

4 に答える 4

2

これは 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;
 }

上記のコードはこちら

于 2013-01-16T17:22:24.030 に答える
0
$isset = isset(...); //save the value
if ($isset) { .... }; // reuse the value
...
if ($isset) { ... }; // reuse it yet again
于 2013-01-16T17:15:25.290 に答える
0

あなたができる唯一のことは、保存することです$res['resId'][$dDate]

$var = $res['resId'][$dDate];
if( isset($dayMarks[$var]) ) {
    $var = $dayMarks[$var];
    echo $var;
}
于 2013-01-16T17:18:21.630 に答える
-1

単純に変数処理を割り当てたい場合は、次のように書くこともできます。

$var = $dayMarks[$res['resId']][$dDate]);
if (!isset($var)) unset($var);
于 2013-01-16T17:52:17.617 に答える