🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

862閲覧

多次元配列を出力したい

yukinari302

総合スコア19

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/12/07 11:12

多次元配列をfor文、foreach文を使って出力したい
期待値 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1

PHP

1<?php 2 3$test = array( 4 array( 5 array( 6 1,1,1 7 ), 8 array( 9 1,1,1 10 ), 11 array( 12 1,1,1 13 ) 14 ), 15 array( 16 array( 17 1,1,2 18 ), 19 array( 20 1,1,1 21 ) 22 ) 23); 24 25 26foreach($test as $key1 => $value1){ 27 foreach($value1 as $key2 => $value2){ 28 print_r($value2); 29 } 30} 31 32for($i = 0; $i < count($test); $i++){ 33 echo $test[$i]; 34} 35

解決したいこと

①foreachでecho出力で期待値を取得したい
foreach文はループの階層を深くしデバッグ用のvardumpで期待値を出力することができたのですが、echoで出力すると、

Array ( [0] => 1 [1] => 1 [2] => 1 ) Array ( [0] => 1 [1] => 1 [2] => 1 ) Array ( [0] => 1 [1] => 1 [2] => 1 ) Array ( [0] => 1 [1] => 1 [2] => 2 ) Array ( [0] => 1 [1] => 1 [2] => 1 )

と出力され、処理自体はうまく行ったように思います。
こちらをechoで出力して期待値である1 1 1 1 1 1 1 1 1 1 1 2 1 1 1と出力したいです。

②for文
foreachはうまく処理を書くことができたのですが、
for文での書き方が分かりませんので教えていただけると助かります。

よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

あらかじめ構造が分かってるなら地道に出力すると

php

1<?php 2$test = array(array(array(1,1,1),array(1,1,1),array(1,1,1)),array(array(1,1,2),array(1,1,1))); 3 4foreach ($test as $value1) { 5 foreach ($value1 as $value2) { 6 foreach ($value2 as $value3) { 7 echo $value3 . ' '; 8 } 9 } 10} 11echo "\n"; 12 13for ($i=0; $i<count($test); $i++) { 14 for ($j=0; $j<count($test[$i]); $j++) { 15 for ($k=0; $k<count($test[$i][$j]); $k++) { 16 echo $test[$i][$j][$k] . ' '; 17 } 18 } 19} 20echo "\n"; 21?>

で、便利な関数を使うと

php

1<?php 2$test = array(array(array(1,1,1),array(1,1,1),array(1,1,1)),array(array(1,1,2),array(1,1,1))); 3array_walk_recursive($test, function($v,$k){echo $v . ' ';}); 4echo "\n"; 5?>

投稿2020/12/07 12:36

編集2020/12/07 12:38
takasima20

総合スコア7460

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukinari302

2020/12/07 13:06

期待値を出力することができました。 自分なりにググってみたのですが、 連想配列についてのforeach、for文ばかりで困っておりましたので、 とても助かりました。 こちらベストアンサーに選ばせていただきました。 for文は入れ子にすることで 条件式が「TRUE」の間、繰り返し行う処理を行うのですね。 便利な関数array_walk_recursiveも調べてみます!! 本当にありがとうございました。
guest

0

多次元のデータを掘り下げる処理を再帰処理といいます

投稿2020/12/07 11:39

yambejp

総合スコア116694

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2020/12/07 11:40

function array_values_recursive($arr){ return array_reduce($arr,function($x,$y){ if(!is_array($y)){ array_push($x,$y); }else{ $x=array_merge($x,array_values_recursive($y)); } return $x; },[]); } $test = array( array( array( 1,1,1 ), array( 1,1,1 ), array( 1,1,1 ) ), array( array( 1,1,2 ), array( 1,1,1 ) ) ); $result=array_values_recursive($test); print_r($result);
yukinari302

2020/12/07 13:09

ご回答ありがとうございました。 再帰処理について調べてみました。 今回for文、foreachでの出力だったのですが、 とても勉強になりました! ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問