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

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

ただいまの
回答率

88.04%

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 8,843

score 57

実現したいこと

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

$color = array(
    'red' => '赤',
    'yellow' => '黄色',
    'green' => 'メロン',
    'pink' => '桃'
);

if(is_page(array(/*ここにキー一覧'red','yellow','green','pink'を代入したいが方法がわからない*/))){
    //WordPressのページ判定処理
}

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

表示結果 ⇒ red,yellow,greenpink

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

$color = array(
    'red' => '赤',
    'yellow' => '黄色',
    'green' => 'メロン',
    'pink' => '桃'
);

$keys = array_keys($color);
foreach ($keys as $key) {
    echo $key;
    if(next($keys)){
        echo ",";
    }
}

//表示結果 red,yellow,greenpink

if(is_page(array(/*ここに代入したい*/))){
    //WordPressのページ判定処理
}


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

追記

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+5

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

$color = array(
    'red' => '赤',
    'yellow' => '黄色',
    'green' => 'メロン',
    'pink' => '桃'
);

if(is_page(array_keys($color))){

}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/13 20:18

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

    取得したい値は下記となります。
    'red','yellow','green','pink'

    キャンセル

  • 2017/04/13 21:58

    勘違いで回答してしまいすみません。
    いただいたソースで上手くいきました。

    誤って下記で試していました。
    if(is_page(array(array_keys($color))))

    正しい回答をいただいていたのに申し訳ありませんでした。
    そしてありがとうございました!

    キャンセル

+4

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/13 21: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(); に入れても思うような結果にならないのはおわかりいただけると思います

    キャンセル

  • 2017/04/13 21:57

    確かにおっしゃる通り、oskbitさんのソースでうまくいきました…勘違いでした…
    implode関数、とても勉強になりました。

    初歩的な内容に何度もお付き合いいただきましてありがとうございました。

    キャンセル

  • 2017/04/14 21:42

    今更ですが、21:56の方に気づかず返信をしていました。
    うまくはいったものの根本的な部分が理解ができず、考え込んでいました。

    ↓この部分でかなりイメージが掴めました。
    >「連想配列のキーをカンマ区切りで取得して」しまうと、コード的には
    >"'red','yellow','green','pink'"
    >ということになってしまいます。

    色々なパターンを記述して検証してみようかと思います。
    とても丁寧なご説明をいただき、本当にありがとうございました!

    キャンセル

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

  • ただいまの回答率 88.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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