プロが教える店舗&オフィスのセキュリティ対策術

<?php
$price = $sum[0][0]["sumPrice"] / $count[0][0]["count"];
if (empty($price)) {
print '0円';
} else {
print $sum[0][0]["sumPrice"] / $count[0][0]["count"];
}
?>

Notice (8): Undefined offset: 0
Warning (2): Division by zero
とのエラーででています。

エラーの下には0が表示されていますが、エラーが消えません。
どうしたらよいのでしょうか?

A 回答 (1件)

<?php


$price = $sum[0][0]["sumPrice"] / $count[0][0]["count"];
if (empty($price)) {

この 「$price = $sum[0][0]["sumPrice"] / $count[0][0]["count"];」 を実行した時点で発生しているNoticeとWarningと思われます。
Notice (8): Undefined offset: 0 から
 $sum[0] が存在しない
 $sum[0][0]が存在しない
 $count[0] が存在しない
 $count[0][0]が存在しない
 のいずれか、あるいは、複数が原因
Warning (2): Division by zero から
 $count[0][0]["count"] == 0 になっている
 $count[0] が存在しないため、0として扱われている
 $count[0][0]が存在しないため、0として扱われている
 のいずれか、あるいは、複数が原因

単にメッセージを出さないだけなら、error_reportingで制御等の方法がありますが、根本対策ではありません。
 $price = $sum[0][0]["sumPrice"] / $count[0][0]["count"];
 if (empty($price)) {
と、「エラーが発生する可能性のある処理」→「エラーの判定」 とするのではなく
 if ( エラーが起る条件 ) {
  print '0円';
 } else {
  print $sum[0][0]["sumPrice"] / $count[0][0]["count"];
 }
と、先に判定して、「エラーが発生する可能性のある処理」自体を実行しない、というのがよいやり方です。
あるいは
 if ( 有効な値になっているか? ) {
  print $sum[0][0]["sumPrice"] / $count[0][0]["count"];
 } else {
  print '0円';
 }
と、する方がいいかもしれません。

なお、emptyでは nullかどうかの判定にはなりません。
nullの判定は is_nullです。
また、「Notice (8): Undefined offset: 0 」のような、配列の添字が存在するかは、 issetやarray_key_existsを使います。
http://php.net/manual/ja/function.isset.php
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!