MeWrite Docs

Undefined index

PHPで配列に存在しないキーにアクセスした場合に発生するエラー

概要

Undefined index は、PHPで配列の存在しないキーにアクセスしようとした場合に発生するNotice(警告)です。PHP 8.0以降ではWarningに昇格しました。

エラーメッセージ

Notice: Undefined index: username in /var/www/html/index.php on line 10
Warning: Undefined array key "email" in /var/www/html/index.php on line 15

原因

1. 存在しないキーへのアクセス

1
2
$user = ['name' => 'John'];
echo $user['email']; // Undefined index: email

2. フォームデータの未送信

1
2
// POSTデータが送信されていない場合
$username = $_POST['username']; // Undefined index

3. URLパラメータの欠如

1
2
// ?id= がURLにない場合
$id = $_GET['id']; // Undefined index

解決策

1. isset()でチェック

1
2
3
4
5
if (isset($_POST['username'])) {
    $username = $_POST['username'];
} else {
    $username = '';
}

2. null合体演算子(PHP 7.0+)

1
2
$username = $_POST['username'] ?? '';
$email = $_GET['email'] ?? 'default@example.com';

3. array_key_exists()を使用

1
2
3
4
5
6
7
$user = ['name' => 'John', 'email' => null];

// issetはnull値をfalseと判定する
if (isset($user['email'])) { } // false

// array_key_existsはキーの存在のみチェック
if (array_key_exists('email', $user)) { } // true

4. filter_input()を使用(フォームデータ)

1
2
$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);

5. デフォルト値の設定

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
function getConfig(array $config): array {
    return array_merge([
        'debug' => false,
        'timeout' => 30,
        'retries' => 3,
    ], $config);
}

$config = getConfig(['debug' => true]);
// $config['timeout'] = 30 (デフォルト値)

6. @演算子で警告を抑制(非推奨)

1
2
// 非推奨: エラーを隠すだけで問題を解決しない
$username = @$_POST['username'];

PHP 8.0以降の変更

1
2
3
4
5
6
7
8
// PHP 7.x: Notice
// PHP 8.0+: Warning

// エラーレベルの設定
error_reporting(E_ALL & ~E_WARNING);

// 推奨: null合体演算子を使う
$value = $array['key'] ?? null;

関連エラー

関連エラー

PHP の他のエラー

最終更新: 2025-12-17