前提・実現したいこと
PHPの勉強をしていてarrayがうまく使えず困っています。。PHPの配列にDBから取り出した値(カンマで区切った複数の数字)を変数として差し込む方法が知りたいです。変数の値を正しく取得できない状況なので解決したいです。
実現したい内容はarray(1, 2, 3);の「1, 2, 3」の数字を、DBから動的に取得して差し替えたいです。配列の中身をチェックして処理を書き分けたいので以下の通り、値が含まれる場合と含まれない場合で出力を変えようと考えています。
可能なら「事前にカンマ区切りへ変換した数字の文字列にして 『array(6,11,37)』等にしたい」という意味です。
該当のソースコード
PHP
1<?php 2 //参考にしたベースのPHP 3 $check = 3; 4 $datas = array(1, 2, 3); 5 if (in_array($check, $datas)) { 6 echo "配列内に {$check} が含まれます"; 7 } else { 8 echo "配列内に {$check} は含まれません"; 9 } 10?>
配列内に 3 が含まれます
上記「1, 2, 3」に指定する文字列を、DB側から取得して「arrayの引数」にしたかったので以下を試しました。しかし「$check = 1;」「$check = 2;」「$check = 3;」どれに変更しても全パターンで「含まれない」になりました。
PHP
1<?php 2 //「1, 2, 3」のすべてが含まれなくなったPHP 3 $number = array(1, 2, 3); 4 $check = 3; 5 $datas = array($number); 6 if (in_array($check, $datas)) { 7 echo "配列内に {$check} が含まれます"; 8 } else { 9 echo "配列内に {$check} は含まれません"; 10 } 11?>
配列内に 3 は含まれません
※「$check = 2;」や「$check = 3;」に変更しても含まれませんでした。初心者なのでミスがあるかもしれません。
試したこと
関数「implode」を使って配列をカンマ区切りの文字列に変換すると「$check = 1;」のみ含まれる状態にできましたが、なぜか「$check = 2;」や「$check = 3;」にすると含まれておらず、配列の値をチェックできず困っています。
PHP
1<?php 2 //「1」だけが含まれる状態になったPHP 3 $number = array(1, 2, 3); 4 $result = implode(',', $number); 5 $check = 3; 6 $datas = array($result); 7 if (in_array($check, $datas)) { 8 echo "配列内に {$check} が含まれます"; 9 } else { 10 echo "配列内に {$check} は含まれません"; 11 } 12?>
配列内に 3 は含まれません
もし「$check = 1;」に変更すると含まれる状態になります。
配列内に 1 が含まれます
補足情報
なぜ「1のみ含まれるのか?」は調べ中です。
参考として「echo $result;」では「1,2,3」と出力できました。しかし「var_export($result);」だと「'1,2,3'」 と両端にシングルクオーテーション付きで出力されるので変数自体の中身が怪しいなと考えています。もし仮に「array(echo $result);」と書くことができれば動くような気もしています。文法エラーなので書けませんが・・・
初心者なので疑う部分をわかっていないところもありますが、変数はそのまま引数に使うと(echoしないのであれば)両端にシングルクオーテーションが付いて、処理の邪魔をするのでしょうか?
他にどういった解決方法がありますか?もし何かよいアイデアがあれば教えていただければ幸いです。
追記情報
SQLと言っていいのかわかりませんが、以下の方法で保存しています。
PHP
1 <?php 2 add_option('select'); 3 update_option('select', $_POST['select']); 4 $output = get_option('select'); 5 var_export($output); 6 ?> 7 <select name="select[]" multiple="multiple"> 8 <option value="0">エッセイ</option> 9 <option value="1">ファンタジー</option> 10 <option value="2">ノンフィクション</option> 11 <option value="3">歴史小説</option> 12 <option value="4">短編小説</option> 13 <option value="5">図鑑</option> 14 </select>
たとえば「エッセイ」と「図鑑」を選んで保存すると「var_export($output);」で以下が出力されます。
array ( 0 => '0', 1 => '5', )
保存後にDBの「option_name」の「select」と同じ列(テーブル?)にある「option_value」という値をチェックしたら「a:2:{i:0;s:1:"0";i:1;s:1:"5";}」が入っていました。調べてみたらシリアライズ化された値とのことでした。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/26 05:03 編集