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

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

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

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

Q&A

0回答

310閲覧

PHP 複雑な配列から新しく配列を作り直したい

shimon11

総合スコア49

PHP

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

0グッド

0クリップ

投稿2022/08/11 01:11

編集2022/08/11 01:13

前提

PHPでプログラムを作っています。
複雑な配列から新しく配列を作り直すプログラムの書き方がもう少し良い方法が無いか教えていただきたいです

paiza.io
https://paiza.io/projects/wEW32cg7yb_7G92g-NFETQ

以前objectの場合は再起処理を使えば良いということを回答いただいたのですが配列の時にうまくいかなくなりました。
https://teratail.com/questions/9aytjvxrq18t6k

発生している問題

PHP

1// このような変数があります。 2$schema = array( 3 'some_int' => array( 4 'type' => 'number', 5 'default' => 1, 6 ), 7 'some_array' => array( 8 'type' => 'array', 9 'default' => array( 10 'a', 11 'b', 12 'c' 13 ), 14 ), 15 // arrayの中にobjectがあるとPHP Warning: Undefined array key "default" が出る 16 'some_array_in_object' => array( 17 'type' => 'array', 18 'items' => array( 19 'type' => 'object', 20 'items' => array( 21 'some_int' => array( 22 'type' => 'number', 23 'default' => 1, 24 ), 25 'some_bool' => array( 26 'type' => 'boolean', 27 'default' => false, 28 ), 29 ), 30 ), 31 ), 32 'some_object' => array( 33 'type' => 'object', 34 'items' => array( 35 'some_object_child_1' => array( 36 'type' => 'object', 37 'items' => array( 38 'some_object_grand_child_1_1' => array( 39 'type' => 'string', 40 'default' => 'some_object_grand_child_1_1', 41 ), 42 'some_object_grand_child_1_2' => array( 43 'type' => 'string', 44 'default' => 'some_object_grand_child_1_2', 45 ), 46 'some_object_grand_child_1_3' => array( 47 'type' => 'string', 48 'default' => 'some_object_grand_child_1_3', 49 ), 50 ), 51 ), 52 'some_object_child_2' => array( 53 'type' => 'object', 54 'items' => array( 55 'some_object_grand_child_2_1' => array( 56 'type' => 'string', 57 'default' => 'some_object_grand_child_2_1', 58 ), 59 'some_object_grand_child_2_2' => array( 60 'type' => 'string', 61 'default' => 'some_object_grand_child_2_2', 62 ), 63 'some_object_grand_child_2_3' => array( 64 'type' => 'string', 65 'default' => 'some_object_grand_child_2_3', 66 ), 67 ), 68 ), 69 ), 70 ), 71 'some_bool' => array( 72 'type' => 'boolean', 73 'default' => false, 74 ), 75); 76 77function default_values_from_schema($schema){ 78 $values=[]; 79 foreach($schema as $key=>$value){ 80 if ($value['type']==='object') { 81 $values[$key] = default_values_from_schema($value['items']); 82 } else { 83 $values[$key] = $value['default']; 84 } 85 } 86 return $values; 87} 88 89var_dump(default_values_from_schema($schema));

最終的にはこのようなかたちにしたいです

PHP

1array(3) { 2["some_int"]=> 3int(1) 4["some_array"]=> 5 array(3) { 6 [0]=> 7 string(1) "a" 8 [1]=> 9 string(1) "b" 10 [2]=> 11 string(1) "c" 12 } 13array(1) { 14 ["some_array_in_object"]=> 15 array(2) { 16 ["some_int"]=> 17 int(1) 18 ["some_bool"]=> 19 bool(false) 20 } 21} 22["some_object"]=> 23array(2) { 24["some_object_child_1"]=> 25array(3) { 26["some_object_grand_child_1_1"]=> 27string(27) "some_object_grand_child_1_1" 28["some_object_grand_child_1_2"]=> 29string(27) "some_object_grand_child_1_2" 30["some_object_grand_child_1_3"]=> 31string(27) "some_object_grand_child_1_3" 32} 33["some_object_child_2"]=> 34array(3) { 35["some_object_grand_child_2_1"]=> 36string(27) "some_object_grand_child_2_1" 37["some_object_grand_child_2_2"]=> 38string(27) "some_object_grand_child_2_2" 39["some_object_grand_child_2_3"]=> 40string(27) "some_object_grand_child_2_3" 41} 42} 43["some_bool"]=> 44bool(false) 45}

お心優しい方助言いただけたら幸いです

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

最終的にはWordPressのregister_settingのdefaultとpropertiesの値に入れるための処理です
https://developer.wordpress.org/reference/functions/register_setting/#comment-5289

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問