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

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

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

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

配列

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

Q&A

2回答

503閲覧

php「自作関数」を用いた「keyの抽出」

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

配列

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

0グッド

1クリップ

投稿2021/05/28 06:51

編集2021/05/28 07:09

前提・実現したいこと

連想配列からkeyを抽出した配列を返す関数を作りたいので
PHPの配列関数を使わずに作成したいと考えています。
以下の方法で試しているのですがkeyをすべて抽出することができません…。

php

1<?php 2echo "<h1>Keyの抽出</h1>"; 3 4function array_keys(array $arr) 5{ 6 $extractedKey = []; //keyを抽出した配列を作成する 7 foreach ($arr[0] as $key => $value) { 8 $extractedKey[] = $key; 9 } 10 return $extractedKey; 11} 12 13 14echo "<pre>\n"; 15 16$data = [ 17 ["ID" => 1, "氏名" => "山田太郎", "役職" => "社長"], 18 ["ID" => 2, "氏名" => "山本二郎", "年齢" => 45, "入社年" => "1989"], 19 ["ID" => 3, "年齢" => 35, "氏名" => "山崎三郎", "性別" => "男"], 20 ["ID" => 4, "年齢" => 30, "役職" => "係長", "性別" => "女"], 21 ["ID" => 5, "氏名" => "山木五郎", "役職" => "社員", "入社年" => "2005"], 22]; 23$keys = array_keys($data); 24var_dump($keys); 25 26$data = [ 27 ["ID" => 1, "名前" => "ポチ", "犬種" => "柴犬", "性別" => "オス"], 28 ["ID" => 2, "名前" => "ハナコ", "性別" => "メス", "犬種" => "ポメラニアン"], 29 ["ID" => 3, "名前" => "メアリー", "犬種" => "プードル", "性別" => "メス", "年齢" => "5才"], 30 ["ID" => 4, "名前" => "ジョン", "性別" => "オス", "犬種" => "秋田犬"], 31 ["ID" => 5, "名前" => "ボブ", "年齢" => "3才", "犬種" => "シェパード", "性別" => "オス"], 32]; 33$keys = array_keys($data); 34var_dump($keys); 35 36echo "</pre>\n";

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

出力は以下の通りです

array (size=3)
0 => string 'ID' (length=2)
1 => string '氏名' (length=6)
2 => string '役職' (length=6)

array (size=4)
0 => string 'ID' (length=2)
1 => string '名前' (length=6)
2 => string '犬種' (length=6)
3 => string '性別' (length=6)

このようにすべて抽出できていません
もし、難しいとか、この記法ではまずいとかあれば
なぜそうなのかを教えていただけると幸いです。

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

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

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

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

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

m.ts10806

2021/05/28 06:56

foreach ($arr[0] 0固定で回しているのはどういう意図でしょうか あと「関数型プログラミング」は本件とは無関係です。
退会済みユーザー

退会済みユーザー

2021/05/28 07:08

$arrから keyを抽出した配列を返したく思い0で固定してます。 ただ、大変勉強不足で申し訳ないのですが0~2までを入れても同じ結果が得られるのは理解できていないです… 関数型プログラミングの件、承知しました。削除します
guest

回答2

0

このようにすべて抽出できていません

最初のデータに関して言えば、山田社長の情報のみを見てるので、ID、氏名、役職の3つだけが抽出されます。

原因は、↓この$arr[0]です。

php

1foreach ($arr[0] as $key => $value) {

仮に、$arr[0]$arr[1]に変えると、山本さんの情報のみを見るので、ID、氏名、年齢、入社年の4つだけが抽出されると思います。

5名全員の情報からキーを抽出したいなら、foreachを2重にすれば良いです。

php

1foreach ($arr as $ar) { 2 // $arrは全員のデータで、$arは1人分のデータ 3 foreach ($ar as $key => $value) { 4 $extractedKey[] = $key; 5 } 6}

ただし、これだと、同じキーが2回以上抽出される可能性があるので、それを回避するか、抽出後に重複を取り除く必要があります。そこは自分で考えてみてくださいね。

投稿2021/05/29 14:31

gpsoft

総合スコア1323

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

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

0

まずすでにある関数名を再宣言しないように

PHP

1function my_array_keys($arr){ 2 return array_unique(array_reduce($arr,function($x,$y){ 3 return array_merge($x,array_keys($y)); 4 },[])); 5} 6$keys = my_array_keys($data); 7var_dump($keys);

投稿2021/05/28 07:35

yambejp

総合スコア115010

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問