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

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

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

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

Q&A

解決済

3回答

727閲覧

php配列と連想配列同士で行う置き換え処理

enigumalu

総合スコア192

PHP

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

0グッド

0クリップ

投稿2019/03/11 01:40

配列$aの項目を連想配列$bのkey項目と一致したらそのvalueの値に置き換えたいのですが、そういった事は可能でしょうか?
当初下記のような処理を考えていたのですが、$aの判定要素数が複数あり冗長になるため共通化出来る方法を探しています。

foreach ($b as $key => $value){ if(array_key_exists($a[2],$key)){ $a[2] = $value; } if(array_key_exists($a[3],$key)){ $a[3] = $value; } if(array_key_exists($a[4],$key)){ $a[4] = $value; } } 出力イメージ $a = ['pl001','test1','apple','peach','pear'] $b = array('apple'=>'りんご', 'peach'=>'もも', 'pear'=>'なし'); //処理 $a = ['pl001','test1','りんご','もも','なし']

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

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

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

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

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

guest

回答3

0

array_mapで処理させてしまいましょう。

php

1$a = array_map(function($item) use ($b){ 2 if(array_key_exists($item, $b)) return $b[$item]; 3 return $item; 4}, $a);

3v4lでの実行結果

投稿2019/03/11 01:51

maisumakun

総合スコア145183

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

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

0

input/output のみから判断しています。

php

1<?php 2$a = ['pl001','test1','apple','peach','pear']; 3$b = array('apple'=>'りんご', 'peach'=>'もも', 'pear'=>'なし'); 4 5foreach ($a as $key => $value){ 6 if($key === 0 || $key === 1)continue; 7 if(isset($b[$value])){ 8 $a[$key] = $b[$value]; 9 } 10} 11 12var_dump($a); 13

投稿2019/03/11 02:05

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

m.ts10806

2019/03/11 02:10

あ、そうか。値変更しないならcontinueで良かったですね・・
guest

0

ベストアンサー

細かいですが、$aを[]なら$bも[]で定義された方が・・・

同じforeachにするにしても$aを主動にした方がスッキリするように思います。
$a[2]のような直に指定すると汎用性もなくなりますし。

php

1<?php 2$a = ['pl001','test1','apple','peach','pear']; 3$b = ['apple'=>'りんご', 'peach'=>'もも', 'pear'=>'なし']; 4 5foreach($a as $num=>$v){ 6 if(array_key_exists($v,$b)){ 7 $a[$num] = $b[$v]; 8 }else{ 9 $a[$num] = $v; 10 } 11} 12var_dump($a); 13/** 14array(5) { 15 [0]=> 16 string(5) "pl001" 17 [1]=> 18 string(5) "test1" 19 [2]=> 20 string(9) "りんご" 21 [3]=> 22 string(6) "もも" 23 [4]=> 24 string(6) "なし" 25} 26**/

蛇足

te2jiさんの回答を見て、自分のコードももっと短く出来そうだと思ったので、
蛇足ですが、三項演算子でより短く書いてみました。

php

1<?php 2foreach($a as $num=>$v){ 3 array_key_exists($v,$b) ? $a[$num] = $b[$v]:false; 4}

continue入らなかったので、仮でfalseとしてみてますが結果は同じです。

投稿2019/03/11 01:59

編集2019/03/11 02:20
m.ts10806

総合スコア80850

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問