質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
多次元配列

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

PHP

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

ループ

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

配列

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

Q&A

解決済

3回答

2257閲覧

PHP 多次元連想配列にて値のみ出力したい

n_k23

総合スコア21

多次元配列

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

PHP

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

ループ

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

配列

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

0グッド

0クリップ

投稿2021/10/28 09:45

前提・解決したいこと

多次元配列の中に連想配列を作り、name,age,genderを格納したデータがある。

このデータを元に

田中25男
鈴木20男
佐藤23女

という形でループ構文を使用して出力したい。

発生している問題

一つは出力できるが3つ連続での出力が分からない

PHP

1コード 2$pe = [ 3 'name' => ['田中','鈴木','佐藤'], 4 'age' => [25, 20, 23], 5 'gender' => ['男','男','女'] 6 ]; 7 8foreach($pe as $key => $val) { 9 echo $val[0]; 10} 11// 田中25男 と出力される。

試したこと

html

1コード 2$pe = [ 3 'name' => ['田中','鈴木','佐藤'], 4 'age' => [25, 20, 23], 5 'gender' => ['男','男','女'] 6 ]; 7 8$cnt = count($pe); 9 10for($i = 0; $i < $cnt; $i++){ 11 foreach($pe[$i] as $k){ 12 echo $k; 13 } 14}

for構文を使用してみたが上手くいかず、色々調べてみたが
見つからず質問させて頂きます。
よろしくお願いします。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答3

0

単純にやるならこう

PHP

1$pe = [ 2 'name' => ['田中','鈴木','佐藤'], 3 'age' => [25, 20, 23], 4 'gender' => ['男','男','女'] 5 ]; 6 7foreach($pe["name"] as $key => $val) { 8 /* 9 $keyは$pe["name"]を順に処理 10 $key=0,$val=田中なので,$pe["age"][$key]=25,$pe["gender"][$key]=男 11 $key=1,$val=鈴木なので,$pe["age"][$key]=20,$pe["gender"][$key]=男 12 $key=2,$val=佐藤なので,$pe["age"][$key]=23,$pe["gender"][$key]=女 13 */ 14echo $val.$pe["age"][$key].$pe["gender"][$key]."<br>\n"; 15} 16//配列系の関数で処理すると 17print implode("<br>\n",array_map(function($index) use ($pe){ 18 return array_reduce(array_keys($pe),function($data,$key) use($pe,$index){ 19 return $data.$pe[$key][$index]; 20 }); 21},array_keys(array_values($pe)[0])));

投稿2021/10/28 10:35

編集2021/10/28 11:32
yambejp

総合スコア116724

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

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

n_k23

2021/10/28 10:43 編集

ありがとうございます。 このような簡潔な方法があるのですね。 復習をしておきたいので この方法についての参考になる解説、資料、URL等はございますでしょうか?
guest

0

面白い方法がありましたので紹介しますね。

php

1<?php 2$pe = [ 3 'name' => ['田中','鈴木','佐藤'], 4 'age' => [25, 20, 23], 5 'gender' => ['男','男','女'] 6 ]; 7foreach (array_map(null, $pe['name'], $pe['age'], $pe['gender']) as $a) { 8 echo $a[0] . ',' . $a[1] . ',' . $a[2] . "\n"; 9} 10?>

via https://www.softel.co.jp/blogs/tech/archives/2576

投稿2021/10/28 12:00

takasima20

総合スコア7464

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

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

0

ベストアンサー

田中、鈴木、佐藤をループするので、$pe['name']の長さに合わせてforを回す必要があります。

php

1<?php 2$pe = [ 3 'name' => ['Tanaka', 'Suzuki', 'Satou'], 4 'age' => [25, 20, 23], 5 'gender' => ['M', 'M', 'F'], 6]; 7 8for ($index = 0; $index < count($pe['name']); $index++) { 9 echo vsprintf('%s%s%s', [ 10 isset($pe['name'][$index]) ? $pe['name'][$index] : '', 11 isset($pe['age'][$index]) ? strval($pe['age'][$index]) : '', 12 isset($pe['gender'][$index]) ? $pe['gender'][$index] : '', 13 ]); 14 15 echo "\n"; 16}

投稿2021/10/28 10:15

KAOsaka

総合スコア531

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

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

n_k23

2021/10/28 10:24

ありがとうございます。 解決しました。 復習をしておきたいので この方法についての参考になる資料、URL等はございますでしょうか?
n_k23

2021/10/29 04:26

ありがとうございます。 今まではprogateのみ学習していたので 今後はpaizaとphp.netも学習してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問