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

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

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

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

配列

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

Q&A

解決済

4回答

698閲覧

PHPの連想配列で複数のキーに一つの値を入れ置換したい場合

ayala

総合スコア6

PHP

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

配列

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

0グッド

0クリップ

投稿2020/01/17 19:10

編集2020/01/18 09:16

*編集前の質問を消してしまったため、後半に追記しました。
ご迷惑をおかけ申し訳ありません。

前提・実現したいこと

PHPの連想配列を用い置換したいのですが
その際に、複数のキーに一つの値を入れ置換するやり方が知りたいです。

##どう使いたいか

例として、下記に書かれている**「元のソースコード**」では放送局の数だけ要素を作る必要があるので
**「イメージのソースコード」**のように都道府県ごとに放送局を一つにまとめて都道府県名に置換したいです。

問題

配列で複数のキーに一つの値を入れ、それを連想配列に入れることはできたのですが
置換を行おうとするとエラーになります。
エラーになったコード内容とエラー内容は**「試したたこと**」に記載しました。

元のソースコード

php

1<?php 2 3$target = 'テレビ山梨, 新潟放送, 新潟テレビ21'; 4 5$replace = [ 6'山梨放送' => '山梨県', 7'テレビ山梨' => '山梨県', 8'新潟放送' => '新潟県', 9'テレビ新潟' => '新潟県', 10'新潟総合テレビ' => '新潟県', 11'新潟テレビ21' => '新潟県', 12]; 13 14echo str_replace(array_keys($replace), array_values($replace), $target); 15 16// 結果 山梨県, 新潟県, 新潟県 17?> 18

イメージのソースコード

php

1<?php 2 3$target = 'テレビ山梨, 新潟放送, 新潟テレビ21'; 4 5$yamanashi = ['山梨放送','テレビ山梨' ]; 6$niigata = ['新潟放送', 'テレビ新潟', '新潟総合テレビ', '新潟テレビ21' ]; 7 8$replace = [ 9 $yamanashi => '山梨県' 10 $niigata => '新潟県' 11 ]; 12 13echo str_replace(array_keys($replace), array_values($replace), $target); 14?> 15

試したこと

エラーが出たソースコード

php

1 2<?php 3 4$target = 'テレビ山梨, 新潟放送, 新潟テレビ21'; 5 6$yamanashi = ['山梨放送','テレビ山梨' ]; 7$res = array_combine( $yamanashi, array_pad( [], count( $yamanashi ), '山梨県' ) ); 8 9$replace = [ 10 $res, 11 '新潟放送' => '新潟県', 12 'テレビ新潟' => '新潟県', 13 '新潟総合テレビ' => '新潟県', 14 '新潟テレビ21' => '新潟県', 15 ]; 16 17echo str_replace(array_keys($replace), array_values($replace), $target); 18 19?> 20 21 22
エラーメッセージ PHP Notice: Array to string conversion in /workspace/Main.php on line 16

##編集前の内容

###PHPの配列で複数のキーに一つの値を入れたい場合
PHPの配列で複数のキーに一つの値を入れ置換するやり方が知りたいです。

下記の「元ソースコード」を「イメージのソース」のように
複数のキーに一つの値を入れる際に1行ですませるようにしたいです。

元のソースコード

php

1<?php 2 3 4$replace = [ 5'山梨放送' => '山梨県', 6'テレビ山梨' => '山梨県', 7]; 8 9print_r($replace); 10 11?> 12

イメージのソースコード

php

1<?php 2 3$yamanashi = ['山梨放送','テレビ山梨' ]; 4 5$replace = [ 6 $yamanashi => '山梨県' 7 ]; 8 9print_r($replace); 10?> 11
エラーメッセージ PHP Warning: Illegal offset type in /workspace/Main.php on line 6

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

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

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

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

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

kei344

2020/01/18 08:25

回答が付いた質問の編集は慎重に行ってください。質問文のコードについて回答にて指摘があった場合は「追記」し、元のコードを編集する場合も「直したこと」がわかるようにしてください。後から見た人から見て、現在の回答が「無いコードに対しての指摘」になり、意味がわからなくなります。
ayala

2020/01/18 09:19

大変失礼いたしました。 編集前の内容を追記いたしました。
guest

回答4

0

ベストアンサー

こんなことかしら?

県がふえたなら加算すればいいじゃない( 警告がでるならば array_merge 等で結合しよう )

php

1<?php 2$yamanashi = ['山梨放送','テレビ山梨' ]; 3$niigata = ['新潟放送', 'テレビ新潟', '新潟総合テレビ', '新潟テレビ21' ]; 4$result = array_combine($yamanashi,array_fill(0, count($yamanashi),'山梨県')) 5 +array_combine($niigata,array_fill(0, count($niigata),'新潟県')); 6print_r($result);

投稿2020/01/18 07:11

編集2020/01/18 09:37
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ayala

2020/01/18 07:45

ありがとうございます!
ayala

2020/01/18 12:21

ありがとうございます! このやり方で、置換することもできました。 $target = 'テレビ山梨, 新潟放送, 新潟テレビ21'; $yamanashi = ['山梨放送','テレビ山梨' ]; $niigata = ['新潟放送', 'テレビ新潟', '新潟総合テレビ', '新潟テレビ21' ]; $replace = array_combine($yamanashi,array_fill(0, count($yamanashi),'山梨県')) +array_combine($niigata,array_fill(0, count($niigata),'新潟県')); echo str_replace(array_keys($replace), array_values($replace), $target); // 出力結果 山梨県, 新潟県, 新潟県
guest

0

PHP

1$yamanashi = ['山梨放送','テレビ山梨' ]; 2$res = array_combine( $yamanashi, array_pad( [], count( $yamanashi ), '山梨' ) ); 3var_export( $res ); 4// array ( 5// '山梨放送' => '山梨', 6// 'テレビ山梨' => '山梨', 7// )

投稿2020/01/17 19:45

kei344

総合スコア69364

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

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

ayala

2020/01/18 06:49

ありがとうございます。 array_combine を使うのですね。
ayala

2020/01/18 09:21

大変失礼いたしました。 編集前の内容を追記いたしました。
guest

0

配列を使って置換をしようと考えています。

str_replaceでしたら、置換先だけ文字列の指定を行うことができます(PHPリファレンス)。わざわざ連想配列を作らなくても大丈夫です。

php

1$yamanashi = ['山梨放送','テレビ山梨' ]; 2 3$replaced = str_replace($yamanashi, '山梨県', $target);

投稿2020/01/18 00:08

maisumakun

総合スコア145121

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

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

m.ts10806

2020/01/18 00:45 編集

私は低評価してませんが、要件満たせてないような・・。 あくまで「元のソースコード」と同じ結果を直に書かずにやるやり方を求めているように思います。 あと、$targetはいずこから・・?
maisumakun

2020/01/18 00:49 編集

> 要件満たせてないような・・。 もとの「要件」が「置換をすること」と捉えて、配列を「作らずに済ませる」方法もあるという趣旨での回答です(配列を他の目的で使うのであればもちろん成立しませんが)。
m.ts10806

2020/01/18 01:24

でもこれって$targetに何を入れたら「元のソースコード」と同じ結果になりますか?
maisumakun

2020/01/18 01:28 編集

なることを意図していません。「もとのソースコード」より手前で迂回できるのではないか、という回答です。
m.ts10806

2020/01/18 01:32

あぁ、なるほど。理解しました。どういう意図での回答だったのか興味を持ったので確認してみました。 確かにデータをどう使いたいかによってはこちらの回答で済む可能性もありますね。
ayala

2020/01/18 07:09

意図を読んでみただき、ありがとうございます。 説明不足ですいません。 連想配列にしたのは、他にもキーと値を追記できるようするためです。 例えば、山梨県以外の放送局も置換したい場合です。 以下のコードですと、放送局の数だけ要素を作る必要があるので 都道府県ごとに放送局を一つにまとめて都道府県名に置換 をしたかったのです。 $replace = [ '山梨放送' => '山梨県', 'テレビ山梨' => '山梨県', '新潟放送' => '新潟県', 'テレビ新潟' => '新潟県', '新潟総合テレビ' => '新潟県', '新潟テレビ21' => '新潟県', ]; echo str_replace(array_keys($replace), array_values($replace), $target); ただ、このやり方だと連想配列は置換できない?ようです。 初学者なので見当外れなことを言っていたらすいません。
guest

0

1行ですませる

「1行で」の定義をきちんと書かないと↓のようなコードが出てきても文句は言えません。

php

1$yamanashi = ['山梨放送','テレビ山梨' ];$replace=[];$val="山梨県";foreach($yamanashi as $k){$replace[$k]=$val;}var_dump($replace);

エラーはそもそも配列のキーには使えない型(今回は配列)をあてはめようとしているからですね。

投稿2020/01/18 00:42

m.ts10806

総合スコア80765

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

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

ayala

2020/01/18 07:14

ありがとうございます。 すいません、言葉足らずでした。 放送局の数だけ要素を作る必要があるので、都道府県ごとに放送局を一つにまとめて都道府県名に置換したい。 という答えで伝わりますかね。
m.ts10806

2020/01/18 07:20

質問を編集して追記してください。 あと、別の回答でも挙がってますが「どう使いたいか」も要件として必要です。
ayala

2020/01/18 07:30

ありがとうございます。 只今、編集しています。
ayala

2020/01/18 09:21

大変失礼いたしました。 追記いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問