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

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

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

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

Q&A

解決済

PHP 2つの配列をマージしたい

shimon11
shimon11

総合スコア45

PHP

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

1回答

0グッド

0クリップ

262閲覧

投稿2022/12/06 04:47

$test_data内のargsとdefaultsをマージしてcorrectにしたいです。
全てを満たすような関数を作りたいです。

配列 既に値がある時は埋め合わせる箇所でうまくいかないです。

どなたかご教授お願いできませんでしょうか?

サンプルコード
https://paiza.io/projects/nKdfGQyRigZZX9xbjUsHwQ?language=php
完全なコード

PHP

1<?php 2// このような変数があります。 3$test_data = array( 4 // 配列 空配列の場合array()を返す 5 array( 6 'args' => array( 7 'array_key' => array(), 8 ), 9 'defaults' => array( 10 'array_key' => array( 11 array( 12 'array_key_1' => 'array_defaults_value_1_1', 13 'array_key_2' => 'array_defaults_value_1_2', 14 'array_key_3' => 'array_defaults_value_1_3', 15 ), 16 ), 17 ), 18 'correct' => array( 19 'array_key' => array(), 20 ), 21 ), 22 // 配列 既に値がある時は埋め合わせる 23 array( 24 'args' => array( 25 'array_key' => array( 26 array( 27 'array_key_1' => 'array_value_1_1', 28 'array_key_2' => 'array_value_1_2', 29 ), 30 array( 31 'array_key_1' => 'array_value_2_1', 32 'array_key_2' => 'array_value_2_2', 33 'array_key_3' => 'array_value_2_3', 34 ), 35 ), 36 ), 37 'defaults' => array( 38 'array_key' => array( 39 array( 40 'array_key_1' => 'array_defaults_value_1_1', 41 'array_key_2' => 'array_defaults_value_1_2', 42 ), 43 array( 44 'array_key_1' => 'array_defaults_value_2_1', 45 'array_key_2' => 'array_defaults_value_2_2', 46 ), 47 array( 48 'array_key_1' => 'array_defaults_value_3_1', 49 'array_key_2' => 'array_defaults_value_3_2', 50 ), 51 ), 52 ), 53 'correct' => array( 54 'array_key' => array( 55 array( 56 'array_key_1' => 'array_value_1_1', 57 'array_key_2' => 'array_value_1_2', 58 ), 59 array( 60 'array_key_1' => 'array_value_2_1', 61 'array_key_2' => 'array_value_2_2', 62 'array_key_3' => 'array_value_2_3', 63 ), 64 ), 65 ), 66 ), 67 68); 69 70function my_array_merge( $args, $defaults ) { 71 $merged = $defaults; 72 foreach ( $args as $key => $value ) { 73 if ( is_array( $value ) && isset( $defaults[ $key ] ) && is_array( $defaults[ $key ] ) && ! empty( $value ) ) { 74 $merged[ $key ] = my_array_merge( $value, $defaults[ $key ] ); 75 } else { 76 $merged[ $key ] = $value; 77 } 78 } 79 return $merged; 80} 81 82foreach ( $test_data as $test_value ) { 83 84 $return = my_array_merge( $test_value['args'], $test_value['defaults'] ); 85 $correct = $test_value['correct']; 86 var_dump( $correct === $return ); 87 88} 89

関連
https://teratail.com/questions/k0dalvmpoh35t7

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

yambejp

2022/12/06 05:20

argsとdefaultsをマージしてcorrectにするのに最初からcorrectが設定されているのはなぜでしょう?
shimon11

2022/12/06 05:43

correctが無いとマージ後の期待している値がわからないからです。 実際はこれはテストコードになります
yambejp

2022/12/06 05:56

一応回答つけましたが、想定と違いますか?
shimon11

2022/12/06 05:59

ありがとうございます。私の理解不足かもしれませんが想定しているものと違うように思います おそらくforeach内のif文を修正すれば良いと思うのですが、、、 ```PHP if ( is_array( $value ) && isset( $defaults[ $key ] ) && is_array( $defaults[ $key ] ) && ! empty( $value ) ) { ```
shimon11

2022/12/06 06:28

すみません。上記のコードは間違いです 以下のコードが正しいです ```PHP 'args' => array( 'array_key' => array( array( 'array_key_1' => 'array_value_1_1', 'array_key_2' => 'array_value_1_2', ), array( 'array_key_1' => 'array_value_2_1', 'array_key_2' => 'array_value_2_2', 'array_key_3' => 'array_value_2_3', ), ), ), 'defaults' => array( 'array_key' => array( array( 'array_key_1' => 'array_defaults_value_1_1', 'array_key_2' => 'array_defaults_value_1_2', ), array( 'array_key_1' => 'array_defaults_value_2_1', 'array_key_2' => 'array_defaults_value_2_2', ), array( 'array_key_1' => 'array_defaults_value_3_1', 'array_key_2' => 'array_defaults_value_3_2', ), ), ), 'correct' => array( 'array_key' => array( array( 'array_key_1' => 'array_value_1_1', 'array_key_2' => 'array_value_1_2', ), array( 'array_key_1' => 'array_value_2_1', 'array_key_2' => 'array_value_2_2', 'array_key_3' => 'array_value_2_3', ), ), ), ```
yambejp

2022/12/06 06:53

回答に追記しました。 想定データとなぜそうなるかを説明いただかないと、単純にマージすると私の回答のような結果になると思います。
mather

2022/12/06 11:15

見る限りでは correct は args をまるっとコピーしたものにしかなってません。 correct を見直して、きちんと望ましい結果にしてみてください。

回答1

2

ベストアンサー

※大幅に割愛

$a=[ [ 'args' => ['string' => 'a'], 'defaults' => ['string' => 'b'], ], ];

$a=[ [ 'args' => ['string' => 'a'], 'defaults' => ['string' => 'b'], 'correct' => ['string' => 'a'], ], ];

になればいいということであれば

PHP

1$a=[ 2 [ 3 'args' => ['string' => 'a'], 4 'defaults' => ['string' => 'b'], 5 ], 6 ]; 7 8foreach($a as &$b){ 9 $b["correct"]=$b["args"]; 10} 11unset($b); 12print_r($a);

投稿2022/12/06 05:32

編集2022/12/06 09:06
yambejp

総合スコア109059

spoofy_dragon, jack👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

shimon11

2022/12/06 07:01

すみません。言葉足らずでした 元々argsにはデータが入っていてそれにデフォルト値をマージしたいという意味でマージ関数を作っています。 ```PHP // argsに同じキーがあったらそのまま array( 'args' => array( 'string' => 'a', ), 'defaults' => array( 'string' => 'b', ), 'correct' => array( 'string' => 'a', ), ), ``` そのためcorrectのような配列を期待しています
yambejp

2022/12/06 07:30

defaultは無視してargsの値を単にcorrectに入れるだけなのでしょうか? マージになっていませんが?
shimon11

2022/12/06 08:16

correctは用意されていないというか、期待した値として比べる用途以外では使わないものになります
yambejp

2022/12/06 09:07

正直命題が理解できていません。一応回答をまるっと書き換えました。 これで違うなら残念ながらお役にたてそうもありません。
shimon11

2022/12/06 09:25

度々の回答ありがとうございます。 もう少し文章を考えてから再度質問を作り直すことにします その際はもし回答いただけるのであれば、よろしくお願いいたします。

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

PHP

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