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

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

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

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

Q&A

解決済

4回答

303閲覧

2つ配列を比較して、同じキーの値を上書きしたい。

MireiLee

総合スコア10

PHP

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

0グッド

0クリップ

投稿2019/04/19 08:53

編集2019/04/19 09:06

プログラミング初心者です。
(私は外国人です。もしかしたら誤った日本語を使うかもしれませんが、ご了承くださいませ。m(_ _)m)

以下のような配列1,配列2から以下の結果が欲しいですが、どうしたら良いのでしょうか。

php

1//条件 2$array1 = [ 3 'a' => 1, 4 'b' => 1, 5 ]; 6 7$array2 = [ 8 'b' => 2, 9 'c' => 2, 10 ]; 11 12//ほしい結果 13Array 14( 15 [a] => 1 16 [b] => 2 17)

2つの配列で、同じキー(この場合'b')の値が配列2の値になるような、結果がほしいです。
('a'は配列1の値のまま)
私は以下のように書いて見ましたが、ほしい結果は出なかったので、適切な書き方を教えてほしいです。

php

1$array3 = []; 2foreach ($array1 as $k1 => $v1) { 3 foreach ($array2 as $k2 => $v2) { 4 if ($k1 == $k2) { 5 $array3[$k1] = $v2; 6 } else { 7 $array3[$k1] = $v1; 8 } 9 } 10} 11 12//このように書くと以下の結果になりました。 13print_r($array3); 14Array 15( 16 [a] => 1 17 [b] => 1 18)

どうぞよろしくお願いします。

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

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

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

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

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

Bernadotte

2019/04/19 09:01

ほしい結果となる条件はなんでしょうか?
Bernadotte

2019/04/19 09:02

表題に書いてありましたね。失礼しました。
MireiLee

2019/04/19 09:03

わかりにくかったですね><本文に追加しときます。
guest

回答4

0

初期値を入れてやると良いです。

php

1<?php 2$array1 = [ 3 'a' => 1, 4 'b' => 1, 5 ]; 6 7$array2 = [ 8 'b' => 2, 9 'c' => 2, 10 ]; 11 12$array3 = []; 13foreach ($array1 as $k1 => $v1) { 14 $array3[$k1] = $v1; 15 foreach ($array2 as $k2 => $v2) { 16 if ($k1 === $k2) { 17 $array3[$k1] = $v2; 18 } 19 } 20} 21 22print_r($array3);

別解

php

1<?php 2$array1 = [ 3 'a' => 1, 4 'b' => 1, 5 ]; 6 7$array2 = [ 8 'b' => 2, 9 'c' => 2, 10 ]; 11 12$array3 = []; 13foreach ($array1 as $k1 => $v1) { 14 $array3[$k1] = isset($array2[$k1])?$array2[$k1]:$array1[$k1]; 15} 16print_r($array3);

投稿2019/04/19 09:08

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

MireiLee

2019/04/19 09:13

ありがとうございます!>< どちらもうまく行けました。勉強になりました!
guest

0

配列 関数 - PHP Manualをブックマークしてください。
右上に「Change language」があるので、自分の最も読みやすい言語で読んでください。

PHPは配列の関数を全部覚えた人が偉大なエンジニアです。
まずはこれらを全て少しずつ読み、どんなモノがあるか、このケースではどんな関数が有効かをイメージしてください。


今回のケースは以下の関数があれば解決出来るんじゃないですか?

それではちょっとPsySHを使って確認してみましょう。

Bash

1$ ./psysh 2Psy Shell v0.9.9 (PHP 7.1.23 — cli) by Justin Hileman 3 4>>> $array1 = ['a' => 1, 'b' => 1] 5=> [ 6 "a" => 1, 7 "b" => 1, 8 ] 9 10>>> $array2 = ['b' => 2, 'c' => 2] 11=> [ 12 "b" => 2, 13 "c" => 2, 14 ] 15 16>>> array_intersect_key($array2, $array1) 17=> [ 18 "b" => 2, 19 ] 20 21>>> array_merge($array1, array_intersect_key($array2, $array1)) 22=> [ 23 "a" => 1, 24 "b" => 2, 25 ]

array_intersect_keyを使えば重複分が取れるので、
それを使って取れた配列を使ってarray_mergeで完了ですね。
1行で出来るじゃん、楽勝。

PHP

1array_merge($array1, array_intersect_key($array2, $array1));

無駄なfor文は一切不要です。
PHPのエンジニアの実力は配列関数を覚えている数で決まるので、
沢山眺めて使いこなせるようにしましょう。

投稿2019/04/19 09:30

編集2019/04/19 09:35
miyabi-sun

総合スコア21158

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

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

MireiLee

2019/04/19 09:44 編集

す、すごい! array_intersect_key関数について読んでみます。 for文もいらなくて済むし、とても便利ですね>< 勉強になりました。ありがとうございます〜〜!!!
guest

0

下記でどうでしょうか。
動作検証済みです。

php

1//条件 2$array1 = [ 3 'a' => 1, 4 'b' => 1, 5 ]; 6 7$array2 = [ 8 'b' => 2, 9 'c' => 2, 10 ]; 11 12$array3 = []; 13 14// 2つ配列を比較して、同じキーの値を上書き 15foreach ($array1 as $key1 => $value1) { 16 // array1にkeyが存在するか 17 if (array_key_exists($key1, $array2)) { 18 // 存在するならarray2の値で上書き 19 $array3[$key1] = $array2[$key1]; 20 } else { 21 $array3[$key1] = $value1; 22 } 23} 24 25var_dump($array3);

投稿2019/04/19 09:10

編集2019/04/19 09:15
Bernadotte

総合スコア310

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

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

MireiLee

2019/04/19 09:19

親切に解説まで書いてくださってありがとうございます! とてもわかりやすいです!
Bernadotte

2019/04/19 09:27

te2jiさんの拝見して思いましたが、三項演算子でもいけますね…。 // 2つ配列を比較して、同じキーの値を上書き foreach ($array1 as $key1 => $value1) { $array3[$key1] = array_key_exists($key1, $array2) ? $array2[$key1] : $value1; } もっと勉強しないとですね…。
guest

0

ベストアンサー

PHP

1 $array1 = [ 2 'a' => 1, 3 'b' => 1, 4 ]; 5 6 $array2 = [ 7 'b' => 2, 8 'c' => 2, 9 ]; 10 11 $array3 = []; 12 foreach ($array1 as $k1 => $v1) { 13 if (isset($array2[$k1])) { 14 $array3[$k1] = $array2[$k1]; 15 } else { 16 $array3[$k1] = $v1; 17 } 18 }

これでどうです?

投稿2019/04/19 09:03

researcher

総合スコア87

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

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

MireiLee

2019/04/19 09:08

いけました! ありがとうございます! ベストアンサーとさせていただきます!(´・ω・`)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問