私はここで本当に奇妙な問題があります。醜い冗長部分を残念に思っていますが、プロトタイピングのためだけです。両方のブロックで、私は与えられた作業時間の秒を計算します。最初のブロックは最初のバージョンで働きましたが、堅牢ではありませんでした。したがって、2番目のブロックはロバストネスの問題を解決しました。 重要な部分は $hours[$row["gamemaster"]] = $hours[$row["gamemaster"]] + $worktime;
PHP Associative Array、同じレベルの同じコードが動作しない
です。両方のブロックで整数$作業時間は秒です。しかし、今問題は、2番目のブロックでは、作業時間の合計が機能しないということです。それは同じレベルにあり、コードの他の部分に変更はありません。
期待値は、各ゲームマスターの勤務時間の合計です。最初のブロックでは、印刷された値は予想通りの時間であり、2番目のブロックでは何も起こりません。そして私の大きな疑問は、合計の計算はまったく同じで、前の作業時間の計算だけが異なるということです。そして、もし私が$hours[$row["gamemaster"]] = $hours[$row["gamemaster"]] + 1;
のように2番目のブロックに普通の整数だけを加えたとしても、最初のブロックについては、$hours[$row["gamemaster"]] = $hours[$row["gamemaster"]] + "p";
のような何か変わったことも起こります。
最初のブロック:
[キー]:[値]
フェリックス:8778047400
マリー:2926018800
第二のブロック:
$時間if($row["no_game"]==0) {
$worktime = strtotime($row["additional"]);
$worktime = $worktime + 5400;
$hours[$row["gamemaster"]] = $hours[$row["gamemaster"]] + $worktime;
}
else {
$worktime = strtotime($row["additional"]);
$hours[$row["gamemaster"]] = $hours[$row["gamemaster"]] + $worktime;
}
出力最初のブロック
if($row["no_game"]==0) {
$str_time = $row["additional"];
$str_time = preg_replace("/^([\d]{1,2})\:([\d]{2})$/", "00:$1:$2", $str_time);
sscanf($str_time, "%d:%d:%d", $hours, $minutes, $seconds);
$time_seconds = $hours * 3600 + $minutes * 60 + $seconds;
$worktime = $time_seconds + 5400;
$hours[$row["gamemaster"]] = $hours[$row["gamemaster"]] + $worktime;
}
else {
$str_time = $row["additional"];
$str_time = preg_replace("/^([\d]{1,2})\:([\d]{2})$/", "00:$1:$2", $str_time);
sscanf($str_time, "%d:%d:%d", $hours, $minutes, $seconds);
$worktime = $hours * 3600 + $minutes * 60 + $seconds;
$hours[$row["gamemaster"]] = $hours[$row["gamemaster"]] + $worktime;
}
出力$時間の第二のブロック: 何も、何等は更新1
配列で書かれている: は、私は
に第2ブロックのコードを減らす$str_time = $row["additional"];
$str_time = preg_replace("/^([\d]{1,2})\:([\d]{2})$/", "00:$1:$2", $str_time);
sscanf($str_time, "%d:%d:%d", $hours, $minutes, $seconds);
$time_seconds = $hours * 3600 + $minutes * 60 + $seconds;
$worktime = $time_seconds + 5400;Update 1:
に第2ブロックのコードを減らします
1:7200
各反復があるのafer
$str_time = $row["additional"];
$str_time = preg_replace("/^([\d]{1,2})\:([\d]{2})$/", "00:$1:$2", $str_time);
sscanf($str_time, "%d:%d:%d", $hours, $minutes, $seconds);
$time_seconds = $hours * 3600 + $minutes * 60 + $seconds;
$worktime = $time_seconds + 5400;
$hours[$row["gamemaster"]] = $hours[$row["gamemaster"]] + $worktime;
は8セット以上の反復と$ worktime用の出力があります3210 2:5400
3:5400
4:7200
5:7200
6:7200
7:5400
8:5400
しかし$時間にエントリがまだ存在しません。
[$行[「ゲームマスター」]]'と '$のworktime'、その正確な値を確認するために、デバッグプリントを行い、合計は「動作しない理由を理解しようあなたが期待しているように。それが「うまくいかない」場合は、「うまくいかない」とはどういう意味なのかを具体的に指定してください。 – MarcoS
大丈夫です。この場合、「動作しない」とは、各ゲームマスターの作業時間を確認するために、最後にキーと値のペアを印刷します。最初のブロックでは、 "name": "hours"のように出力します。しかし、2番目のブロックでは何もしません。値を指定せずに配列にキーを追加することさえできません。 $$ [$ row ["gamemaster"]] = $ hours [$ row ["gamemaster"]] + 1; – datafridge
期待値は何ですか?印刷された価値は何ですか? addendaの値は何ですか? – MarcoS