PHPを勉強中です。
達成させたい目標は多次元配列の中に一つでも指定された文字列が入った場合、
「エラー」とechoさせたいです。
例えば、
$box = [ ['color'=>'red', 'number'=>1], ['color'=>'blue', 'number'=>2], ['color'=>'yellow', 'number'=>3], ['color'=>'pink', 'number'=>4], ]; <!DOCTYPE html> <html lang= "ja"> <head> <meta charset="utf-8"> </head> <body> <section> <p><?php foreach($box as $iremono): ?><?=$iremono['color'].$iremono['number'] ?><?php endforeach; ?></p> <p><?=judge($box) ?></p> </section> </body> </html>
というようにHTMLと組み合わせて表示させます。
まず元々の$boxがあり、
'color'はred、blue、yellow、の3色のみしか入らない条件とします。
数字は1から10までしか入らない条件とします。
その中でもし、'color'にpinkを入れた場合、「エラー」とechoさせたいのです。
自分で行ったことは、
①まずユーザー定義関数を作ることにし'color'に色と'number'に数字を格納する
function judge($box) { $hako = array(); $colors = array('red', 'blue', 'yellow'); $numbers = range(1, 10); foreach($colors as $color){ foreach($numbers as $number){ $hako[] = array('color' => $color, 'number' => $number); } }
②その後、pink入っているときに「エラー」とechoする条件を記述
→ここで悩んでいます。
まず、else ifで行って、条件以外の色が入ったときechoすればいいかと思い、
if(in_array('red', array_column($box, 'color'))){ } else if(in_array('blue', array_column($box, 'color'))){ } else if(in_array('yellow', array_column($box, 'color'))){ } else { echo 'エラー'; }
→配列が表示されるだけで、何もechoされませんでした。
次は演算子を使用すればできるかと思い、以下の記述を行いました。
if (in_array(!'red', array_column($box, 'color')) && in_array(!'blue', array_column($box, 'color')) && in_array(!'yellow', array_column($box, 'color'))){ echo 'エラー'; }
→配列が表示されるだけで、何もechoされませんでした。
試しにすべての!を外してみたところ、「エラー」がechoされました。
次に、多次元配列なので、配列にそれぞれ0~4まで割り振られると思いました。
まず、redが一つでもあれば「合ってる」とechoさせて確認しようと思い、
for($i = 0; $i < 3; $i ++){ if(in_array('red', array_column($box[$i], 'color'))){ echo '合ってる'; } else { echo 'エラー'; } }
→エラーが3回表示されました。
もうここで限界を迎え、質問した次第です。
また、数字も1~10以外をが入った場合「エラー」echoしようと思い、
if(in_array(!range(1,10), array_column($box, 'number'))){ echo 'エラー'; } }
→「エラー」とechoされると思いましたが、何も表示されませんでした。
考え方の間違いでしょうか?
それとも最初のそれぞれcolorやnumberの格納の仕方が原因なのでしょうか?
検索の仕方や、アドバイスを頂けたらと思います。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
2022/01/31 12:05
2022/02/01 16:42