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

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

詳細はこちら
PHP

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

Q&A

解決済

2回答

4420閲覧

PHP多次元連想配列を一次元に再編する方法

natsunoomoide

総合スコア8

PHP

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

0グッド

0クリップ

投稿2019/09/24 16:47

編集2019/09/24 18:35

###実現したいこと
下記get_base_arr()から得られる多次元連想配列を再編し、$mokuteki_arrを得たいです。

###該当のソースコード
こちらが得たい$mokutekiです。一次元です。

$mokuteki = [ 'post1' => 'ポスト1', 'post2' => 'ポスト2', ];

そしてこちらが元になる多次元連想配列を取得する関数get_base_arr()になります。

function get_base_arr( $type, $want ){ $arr = [ 'test' => [ [ 'key'=>'tset1', 'label'=>'テスト1' ], [ 'key'=>'tset2', 'label'=>'テスト2' ] ], 'post' => [ [ 'key'=>'post1', 'label'=>'ポスト1' ], [ 'key'=>'post2', 'label'=>'ポスト2' ], ], ]; $result = []; foreach( $arr[$type] as $key=>$val ){ $result[] = $val[$want]; } return $result; }

###試したこと
イメージとしてはこのような流れになるかと思うのですが…

function get_mokuteki() { $key_arr = get_base_arr('post','key'); $label_arr = get_base_arr('post','label'); $mokuteki=[]; $i=0; foreach( $key_arr as $key ){ $mokuteki[] = [ $key_arr[$i]=>$label_arr[$i] ]; } $i++; return $mokuteki; }

※ここには他の試したことを記載してましたが、質問が余計に煩雑になるため削除しました※

どうすれば$mokutekiを得られるようになるでしょうか?

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

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

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

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

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

guest

回答2

0

配列に追加していくやり方がよく分かっていないんですかね?

$arr を $mokuteki に再編するのは以下のとおりです。

php

1<?php 2$arr = [ 3 'test' => [ 4 [ 'key'=>'tset1', 'label'=>'テスト1' ], 5 [ 'key'=>'tset2', 'label'=>'テスト2' ] 6 ], 7 'post' => [ 8 [ 'key'=>'post1', 'label'=>'ポスト1', 'sub'=>true ], 9 [ 'key'=>'post2', 'label'=>'ポスト2', 'sub'=>false ], 10 ], 11]; 12 13foreach($arr['post'] as $val){ 14 $mokuteki[$val['key']] = $val['label']; 15} 16 17var_export($mokuteki);

あとは適当に関数に埋め込んでやってください。

追記

php

1<?php 2function get_arr(){ 3 $arr = [ 4 'test' => [ 5 [ 'key'=>'tset1', 'label'=>'テスト1' ], 6 [ 'key'=>'tset2', 'label'=>'テスト2' ] 7 ], 8 'post' => [ 9 [ 'key'=>'post1', 'label'=>'ポスト1', 'sub'=>true ], 10 [ 'key'=>'post2', 'label'=>'ポスト2', 'sub'=>false ], 11 ], 12 ]; 13 return $arr; 14} 15 16function get_base_arr( $type, $want ){ 17 $arr = get_arr(); 18 $result = []; 19 foreach( $arr[$type] as $key=>$val ){ 20 $result[] = $val[$want]; 21 } 22 return $result; 23} 24 25function hoge(){ 26 $arr = get_arr(); 27 foreach($arr['post'] as $val){ 28 $mokuteki[$val['key']] = $val['label']; 29 } 30 return ($mokuteki); 31} 32 33var_export(hoge());

投稿2019/09/24 17:08

編集2019/09/25 11:54
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

natsunoomoide

2019/09/24 18:32

申し訳ないのですが、ご提示のコードから関数に埋め込む方法が推察できません。 推察できるのは配列への追加方法としてご提示いただいた下記です。 $mokuteki[$val['key']] = $val['label']; けれど、その元になる foreach($arr['post'] as $val){} の $arr['post'] と 質問にある foreach( $key_arr as $key ){} の $key_arr とが異なる配列なので、私にはそこの調整がかなり困難でした。 質問のコードを簡略化致しましたので、get_mokuteki() に実際にどのように埋め込むかご教授願えませんでしょうか。
takasima20

2019/09/24 23:25

$mokuteki[$key] = $label_arr[$i]; ってことですかね。 あと $i のカウントアップはループ内でやらないと
退会済みユーザー

退会済みユーザー

2019/09/24 23:27

改修後の質問コードの $key_arr[$i], $label_arr[$i] と 回答の $val['key'], $val['label'] をそれぞれ表示して比べてみると良いです。 余談) get_base_arr を使用することは必須なんですかね? 二度(三度?)手間になっているんですけど理解してます?
takasima20

2019/09/24 23:27

ちなみに array_combine() を使う方法もありますね。
退会済みユーザー

退会済みユーザー

2019/09/24 23:38

> takasima20 さん 配列に追加していくやり方がよく分かっていっぽいので、まずはごく基本的な方法を理解したほうが良いかと。 あと、get_base_arr を外したいw
natsunoomoide

2019/09/25 11:44 編集

> te2jiさん >それぞれ表示して比べてみると良いです。 たしかにそうなのですがw、比べて、で、同じにするにはどうすれば…?という感じで悩んでいたのです。 >get_base_arr を使用することは必須なんですかね? >get_base_arr を外したいw これはこれで別のところで使っているので…。ほんと二度手間ですよねw
natsunoomoide

2019/09/25 11:45

> takasima20 さん ありがとうございます。array_combine()は便利そうですね。調べておきます。
退会済みユーザー

退会済みユーザー

2019/09/25 11:55

他に影響なく外すのはそれほど難しくありません。 雑ですが追記しました。
takasima20

2019/09/25 14:21

なんかタイミングわるいコメントでしたね。(汗
guest

0

ベストアンサー

普通にやるとこう

php

1<?PHP 2$arr = [ 3 'test' => [ 4 [ 'key'=>'tset1', 'label'=>'テスト1' ], 5 [ 'key'=>'tset2', 'label'=>'テスト2' ] 6 ], 7 'post' => [ 8 [ 'key'=>'post1', 'label'=>'ポスト1' ], 9 [ 'key'=>'post2', 'label'=>'ポスト2' ], 10 ], 11 ]; 12$mokuteki=array_combine( 13 array_map(function($x){ 14 return $x['key']; 15 },$arr['post']), 16 array_map(function($x){ 17 return $x['label']; 18 },$arr['post']) 19 ); 20 21print_r($mokuteki);

testどうするのでしょうか?

投稿2019/09/25 00:20

yambejp

総合スコア116661

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

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

natsunoomoide

2019/09/25 11:40

ありがとうございます。addslashe初見でした。勉強しておきます。test不要でしたねw
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問