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

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

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

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

Q&A

解決済

2回答

15194閲覧

【PHP】連想配列のキーをカンマ区切りで取得して別の場所に代入したい

umauman

総合スコア57

PHP

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

0グッド

0クリップ

投稿2017/04/13 10:41

編集2017/04/13 11:21

###実現したいこと
下記の配列のキー一覧('red','yellow','green','pink')をカンマ区切りで取得して別の場所に使用したく思っています。

php

1$color = array( 2 'red' => '赤', 3 'yellow' => '黄色', 4 'green' => 'メロン', 5 'pink' => '桃' 6); 7 8if(is_page(array(/*ここにキー一覧'red','yellow','green','pink'を代入したいが方法がわからない*/))){ 9 //WordPressのページ判定処理 10}

色々と調べて下記ソースを試してみたのですが、表示結果でgreenとpinkの間にカンマが追加されず、くっついてしまいます。

表示結果 ⇒ red,yellow,greenpink

さらに、表示では無く「ここに代入したい」箇所に代入する方法がわからずにいます。

php

1 2$color = array( 3 'red' => '赤', 4 'yellow' => '黄色', 5 'green' => 'メロン', 6 'pink' => '桃' 7); 8 9$keys = array_keys($color); 10foreach ($keys as $key) { 11 echo $key; 12 if(next($keys)){ 13 echo ","; 14 } 15} 16 17//表示結果 red,yellow,greenpink 18 19if(is_page(array(/*ここに代入したい*/))){ 20 //WordPressのページ判定処理 21} 22

なにとぞご教授いただけないでしょうか。

###追記
説明が足らずで申し訳ありません。
取得したい値は下記の通りです。
シングルクォーテーションでそれぞれを囲みたく思っています。

'red','yellow','green','pink'

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

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

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

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

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

guest

回答2

0

ベストアンサー

array_keysっていう便利な関数があります。

php

1 2$color = array( 3 'red' => '赤', 4 'yellow' => '黄色', 5 'green' => 'メロン', 6 'pink' => '桃' 7); 8 9if(is_page(array_keys($color))){ 10 11} 12

投稿2017/04/13 11:02

oskbt

総合スコア1895

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

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

umauman

2017/04/13 11:18

ご回答ありがとうございます。 既に質問のソースで「array_keys」を使用してみているのですが、最後にカンマをつけず、かつクォーテーション囲みで取得する方法がわからずにおります。 取得したい値は下記となります。 'red','yellow','green','pink'
umauman

2017/04/13 12:58

勘違いで回答してしまいすみません。 いただいたソースで上手くいきました。 誤って下記で試していました。 if(is_page(array(array_keys($color)))) 正しい回答をいただいていたのに申し訳ありませんでした。 そしてありがとうございました!
guest

0

配列を特定の文字で連結させるには、implodeを使います
http://php.net/manual/ja/function.implode.php

PHP

1implode(',', array_keys($color)); // 'red,yellow,green,pink'

投稿2017/04/13 10:48

thyda.eiqau

総合スコア2982

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

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

umauman

2017/04/13 11:13

早速ありがとうございます! implode関数、勉強になりました。これだとループを使わずにいけるのですね。 こちらでカンマ区切りで取得できました。 説明足らずで申し訳ないのですが、これを文字列として取得したく思っています。 どのように記述したら良いのか、教えていただくことは可能でしょうか? 下記のように取得 'red','yellow','green','pink' 何度も申し訳ございません。
thyda.eiqau

2017/04/13 11:34

いまひとつ意図が読みきれず、見当違いな解答だったら申し訳ないですが、 "'" . implode("','", array_keys($color)) . "'"; ではダメですか?
umauman

2017/04/13 12:04

何度もありがとうございます。 ご提示いただきました、記述で'red','yellow','green','pink'で取得できました。 ただ、代入するとなぜか機能しなくなってしまいます。 ■動作する if(is_page(array('red','yellow','green','pink'))){ //WordPressのページ判定処理 } ■動作しない $color = array( 'red' => '赤', 'yellow' => '黄色', 'green' => 'メロン', 'pink' => '桃' ); $hoge = "'" . implode("','", array_keys($color)) . "'"; if(is_page(array($hoge))){ //WordPressのページ判定処理 } $hoge変数を「print_r」で表示させると結果は 'red','yellow','green','pink' と表示されるため動作しない原因がよくわからないのですが、何か根本的に勘違いしているのかもしれません…
thyda.eiqau

2017/04/13 12:32

うーん、なるほど。 おそらく実現したいことは、oskbtさんの解答のように、is_page(array_keys($color))で達成できるのではないでしょうか? もしも、「配列 = カンマ区切りの文字列」というようなご認識をされているなら、それは誤りです 「'red','yellow','green','pink'」 という一つの文字列ではなく、redとyellowとgreenとpinkの四つの文字列が必要なのではありませんか?
thyda.eiqau

2017/04/13 12:56

説明が難しくて、五月雨式になって申し訳ないのですが array(); というのは、中に書いた文字を配列にしてくれるタグとかではなくて、「引数として与えられた要素をもつ配列を生成する(引数はいくつでも渡すことができる)」という関数です。 array('red','yellow','green','pink'); というのは、「redという文字列」「yellowという文字列」……を子に持つ配列を生成しなさい、ということになります。ためしにprint_r(array('red','yellow','green','pink'));してみたらわかると思いますが、結果は4つの子をもつ1つのarray要素になりますね array(); 関数でなくても、配列を作り出すことはできます。 - 複数の配列をくっつけて一つの配列を生成する array_merge(); - 文字列を指定された区切り文字で切り取って配列を生成する explode(); (配列から文字列を生成する implode(); と正反対ですね) - そして、配列のキーを子に持つ配列を生成する array_keys(); ご承知と思いますが、シングルクォートやダブルクォートで囲われた箇所は、そこが「文字列である」という証です。 つまり、逆に言えば、「文字列であるもの」をコード(プログラム文)で表すならば、それをシングルクォート等で囲わなくてはなりません。 「連想配列のキーをカンマ区切りで取得して」しまうと、コード的には "'red','yellow','green','pink'" ということになってしまいます。これを array(); に入れても思うような結果にならないのはおわかりいただけると思います
umauman

2017/04/13 12:57

確かにおっしゃる通り、oskbitさんのソースでうまくいきました…勘違いでした… implode関数、とても勉強になりました。 初歩的な内容に何度もお付き合いいただきましてありがとうございました。
umauman

2017/04/14 12:42

今更ですが、21:56の方に気づかず返信をしていました。 うまくはいったものの根本的な部分が理解ができず、考え込んでいました。 ↓この部分でかなりイメージが掴めました。 >「連想配列のキーをカンマ区切りで取得して」しまうと、コード的には >"'red','yellow','green','pink'" >ということになってしまいます。 色々なパターンを記述して検証してみようかと思います。 とても丁寧なご説明をいただき、本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問