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

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

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

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

Q&A

解決済

1回答

1096閲覧

文字列を配列にしたい

ssk

総合スコア332

PHP

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

0グッド

0クリップ

投稿2016/11/19 06:23

■DBレコードの値
コーヒー;紅茶;ココア

というDBにあるレコードの値を以下のような配列で変数に入れたいです。
$checkbox = array('coffee' => 'コーヒー','tea' => '紅茶','cocoa'=>'ココア' );

レコードの値は
コーヒー;ココアのケースもあるので、その場合は以下のようにしたいです。
$checkbox = array('coffee' => 'コーヒー','cocoa' => 'ココア' );

可能でしょうか?
よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

こういうことですかね...予め$drinks(key-valueの関係)がわかっている前提ですが。

php

1function getCheckbox($str) { 2 $drinks = array( 3 'coffee' => 'コーヒー', 4 'tea' => '紅茶', 5 'cocoa'=>'ココア', 6 ); 7 $return = array(); 8 $arr = explode(';', $str); 9 foreach($drinks as $key => $value) { 10 if(in_array($value, $arr)) { 11 $return[$key] = $value; 12 } 13 } 14 return $return; 15} 16var_dump(getCheckbox('コーヒー;紅茶;ココア')); 17var_dump(getCheckbox('コーヒー;ココア'));

(追記)
Cakephpを使う前提なら、以下のようにやればできます

php

1<?php 2$drinks = array( 3'コーヒー' => 'コーヒー', 4'紅茶' => '紅茶', 5'ココア'=>'ココア', 6); 7echo $this->Form->input('hoge29',[ 8'type' => 'select', 9'options' => $drinks, 10'value' => explode(';', $hoges->hoge29), 11'checked' => true, 12'multiple' => 'checkbox', 13'label' => false, 14]); 15?>

投稿2016/11/19 06:43

編集2016/11/20 07:06
popobot

総合スコア6586

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

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

ssk

2016/11/20 02:54

icchii様 ご回答ありがとうございます。 CakePHPのチェックボックスを実装しています。 DBのカラムの値が コーヒー;紅茶;ココアとなっていまして 値がすでに存在する場合はedit.ctpでcheckedにしたいです。 echo $this->Form->input('drink',[ 'type' => 'select', 'options' => $checkbox, 'value' => ここに配列を, 'checked' => true, 'multiple' => 'checkbox', 'label' => false ]); 'value' => ここに配列を, に指定してあげると反映できるようですが、icchii様の場合、どのように実装していますか? 具体的に教えていただけると非常に助かります><
ssk

2016/11/20 03:29

$options=array('1'=>'ごはん','2'=>'おかず','3'=>'味噌汁'); $selected=array('1','3'); $formBase= $form->input('hoge' ,array( 'type'=>'select' , 'div' => 'checkbox', 'multiple' =>'checkbox', 'options' => $options, 'selected' => $selected, 'label' => false ) ); ※http://oneday.ter.jp/php/cakephp-php/949.html より抜粋 こちらを参考にしました。 icchii様に教えていただいた方法で行うと、配列が array(3) { ["coffee"]=> string(12) "コーヒー" ["tea"]=> string(6) "紅茶" ["cocoa"]=> string(9) "ココア" } と返ってきているためか、うまく動作しませんでした。 $options=array('1'=>'ごはん','2'=>'おかず','3'=>'味噌汁'); このような形の配列だとうまいくと思うのですが、合っていますか? やり方はわからないのですが、、、
popobot

2016/11/20 06:11

自分が教えたというよりそもそも質問にそういう配列にしたいと書いてあったんですよ... > $options=array('1'=>'ごはん','2'=>'おかず','3'=>'味噌汁'); > このような形の配列だとうまいくと思うのですが、合っていますか? それで全体のやりたいことがうまく行っているなら合っているんじゃないでしょうか
ssk

2016/11/20 06:21

icchii様 言葉足らずで申し訳ございません。 今、下記の配列で返ってきているのですが array(3) { ["coffee"]=> string(12) "コーヒー" ["tea"]=> string(6) "紅茶" ["cocoa"]=> string(9) "ココア" } それを以下のように []のない配列で返すことは可能でしょうか? array(3) { 'coffee'=> string(12) 'コーヒー' 'tea'=> string(6) '紅茶' 'cocoa'=> string(9) 'ココア' } やりたいことは、edit.ctpでチェックボックスをDB参照して 既にある場合はcheckedとしたいです。
popobot

2016/11/20 06:40

それは表示上の違いで意味は同じだと思いますよ!? 'coffee'ではなく'1'などが良ければ、$drinksの定義を変えたらできると思います。
popobot

2016/11/20 06:42

というかDBの値が「コーヒー;紅茶;ココア」となっているなら、以下のようにすればいいような気がします。 $checkbox = array('コーヒー' => 'コーヒー','紅茶' => '紅茶','ココア'=>'ココア' );
ssk

2016/11/20 06:57

以下の内容でチェックボックスがcheckedにならないのですが、何が原因でしょうか?>< function getCheckbox($str) { $drinks = array( 'コーヒー' => 'コーヒー', '紅茶' => '紅茶', 'ココア'=>'ココア', ); $return = array(); $arr = explode(';', $str); foreach($drinks as $key => $value) { if(in_array($value, $arr)) { $return[$key] = $value.','; } } return $return; } $selected = h($hoges->hoge29); $pieces = getCheckbox($selected); echo $this->Form->input('hoge29',[ 'type' => 'select', 'options' => $checkbox, 'value' => $pieces, 'checked' => true, 'multiple' => 'checkbox', 'label' => false, ]);
popobot

2016/11/20 07:07 編集

回答欄に書きました。 多分自分が最初に書いた回答は不要で、単にvalueにexplode(';', $hoges->hoge29)で配列にした値を入れればよかっただけですね...
ssk

2016/11/20 07:08

icchii様 ありがとうございます! 追記していただいた内容で解決することができましたm(_ _)m
popobot

2016/11/20 07:12

うまくいってよかったです。 ※可能であれば次回からは、Cakephp3であること、最終的にやりたいこと、やってみたこと(できればコードも)、どこがうまくいかないのかを質問文に書いてくださいね。そうしないと適切な回答が得られないと思いますよ。
ssk

2016/11/20 07:14

icchii様 承知しました。次回からそのように致します。 いつも本当にありがとうございますm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問