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

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

新規登録して質問してみよう
ただいま回答率
85.47%
PHP

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

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

2回答

576閲覧

配列内の特定のキーを持つ値を取り出したい

taiyo-2017

総合スコア49

PHP

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

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2019/05/15 04:58

編集2019/05/15 05:23

配列内の特定のキーの値のみを取り出したいです。
phpやcakephp3の関数等で取り出すことはできるのでしょうか?

また、もし関数等がないのであれば、
値を取得するための考え方や参考のコードなどを教えていただければと思います。
よろしくお願いします。

具体的にしたいこと

配列

php

1[pages] => Array 2 ( 3 [0] => Array 4 ( 5 [aaa] => 0 6 [bbb] => Array 7 ( 8 [id] => 1 9 [ccc] => 1 10 ) 11 [ddd] => 526 12 [id] => 2 13 [eee] => Array 14 ( 15 [0] => Array 16 ( 17 [id] => 3 18 [fff] => Array 19 ( 20 [id] => 4 21 ) 22 [ggg] => Array 23 ( 24 [0] => Array 25 ( 26 [hhh] => 1 27 [id] => 5 28 ) 29 [1] => Array 30 ( 31 [hhh] => 1 32 [id] => 6 33 ) 34 ) 35 ) 36 ) 37 ) 38 )

上の配列内からキーをが「id」の値すべてを配列で取得したいです。
上の例でいえば、「1,2,3,4,5,6」が格納された配列を受け取れたらと思っています。

追記
配列の深さは一定ではありません。

cakephp標準の関数等での取得方法はわからないので、
自分で実装するとforeach等のループを使うのかと思いましたが、
配列の深さが一定ではないのでループの回数も分からず、それ以上に実装の方法がわからない状態です。
少しでもいいのでヒント等を知ることができればと思い質問させていただきました。

また、開発環境でcakephpを使用していたため、cakephpでの関数等があるのかと思い質問させていただきました。

修正依頼や回答をいただきありがとうございました。

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

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

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

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

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

mather

2019/05/15 05:03

まずはあなた自身で書いたコードを提示してください。 考え方から全部教えてください、というのは丸投げですよ。
m.ts10806

2019/05/15 05:11

実現手段がCakePHPである必要はないのでは。
guest

回答2

0

ベストアンサー

こうしてください

PHP

1$a=[ 2 "pages"=>[ 3 [ 4 "aaa" => 0, 5 "bbb" => [ 6 "id" => 1, 7 "ccc" => 1, 8 ], 9 "ddd" => 526, 10 "id" => 2, 11 ], 12 ] 13 ]; 14/* 中略 */ 15$id=[]; 16array_walk_recursive($a,function($x,$y) use(&$id){ 17 if($y=="id") $id[]=$x; 18}); 19print_r($id); 20

投稿2019/05/15 05:09

yambejp

総合スコア114964

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

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

taiyo-2017

2019/05/15 05:26

回答ありがとうございます。 配列の全ての要素に、ユーザー関数を再帰的に呼ぶというものがあるのですね! 始めて知ることができました。 例も記述して頂いてありがとうございました。
guest

0

普通にforeachで地道に回してkeyがidの場合の値を控えれば良いのではないでしょうか。
階層が毎回違うのであれば、値が配列かどうかでチェックすれば良いと思います。
階層の深さが分からないので再起処理を使ったら良いですね。

php

1function getId(array $arr,array &$list) 2{ 3 foreach($arr as $key=>$value){ 4 if($key === 'id'){ 5 $list[] = $value; 6 } 7 if(is_array($value)){ 8 getId($value,$list); 9 } 10 } 11} 12$list=[]; 13getId($array,$list); 14var_dump($list);

投稿2019/05/15 05:22

m.ts10806

総合スコア80854

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

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

taiyo-2017

2019/05/15 05:29

回答ありがとうございます。 配列かどうかをチェックして、更に関数を呼び出すのですね! 私の考え方ではそこまでたどり着けていませんでした…。 参考の例もありがとうございます!
m.ts10806

2019/05/15 05:37

あと「何度実行するか不定」の場合は再起処理です。覚えておくとあとあと楽になります。 処理フローを細かく文章で書いていくと実装イメージがつきやすくなりますよ。
taiyo-2017

2019/05/15 05:42

なるほど、言語問わずに実装ができますね! わからない時には処理を整理してみます。 丁寧にありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問