質問: "コメントは10文字以上で入力してください。"; } return $error; } ``` ``` お名前: $value ) { echo $error['your_name']; } } ?> メールアドレス: $value ) { echo $error['email']; } } ?> コメント: $value ) { echo $error['comment']; } } ?> ``` ![![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/6d5f9e20682cdf2d9533ffb0b3e70dbc.png)](a942cb43c8a7e64be201ecfa57a0b431.png) 何も入力せずにsubmitすると、エラーメッセージは3回吐き出されます。 何かを入力すると、your_nameのみUndefinedが出てしまいます。 ### 説明 この状態だと、配列errorにそれぞれ値が入力され、echo $valueで、errorの中身が書き出されます。 それを、それぞれyour_nameからのエラーですよ、emailからのエラーですよ、commentからのエラーですよ、とわけて表示させたいです。 配列のさらに元をたどる方法はあるのか、それとも別の方法でいい方法があれば教えていただきたいです。 よろしくお願いいたします。
回答: キーをつけてしまえばよいのではないでしょうか。 ``` $error[ 'your_name' ] = "名前は20文字以内で入力してください。"; ``` 【PHP: foreach - Manual】 【PHP: 配列 - Manual】 https://www.php.net/manual/ja/language.types.array.php#角括弧構文で作成/修正 【[PHP] 配列・連想配列の初期化、結合、追加 - Qiita】 https://qiita.com/shuntaro_tamura/items/784cfd61f355516dfff0#キーを指定して初期化要素の追加 **追記:** ``` = mb_strlen($data['comment'])) { $error['comment'] = "コメントは10文字以上で入力してください。"; } return $error; } $error = validation([]); if( !empty($error) ): ?> $value ): ?>