やりたいこと
・DBの画像情報を一部だけweb上に表示する(毎回ランダム)
・その後の処理のために、全画像の情報も取得しておく
処理内容
<?php
//変数宣言
$FullData = array();
$TmpData = array();
$RandData = array();
//fetchでDBデータをすべて取得し、配列に格納($StmtはPDOで取得済み)
while ($DbData= $Stmt->fetch(PDO::FETCH_ASSOC)) {
array_push($FullData,array(image => $DbData['フィールド名']));
}
//データのシャッフル
shuffle($pai_data);
//array_randでランダムに値を取得
$TmpData = array_rand($FullData, 4);
//更にシャッフル
shuffle($pais_tmp);
//TmpDataで作ったデータをもとに、RandDataにランダム情報を格納
foreach ($TmpData as $data) {
array_push($RandData, $FullData[$data]);
}
?>
<!DOCTYPE html>
//HTMLに描画
<?php for ($i = 0; $i< count($pai_data_start); $i++) { ?>
// current処理を使って、配列に格納した画像情報を表示
<img src=<?= current($pai_data_start[$i])?> >
<?php } ?>
→ページを表示する度にランダムでデータが表示される。
つまづきポイント
・array_randでは配列の番号しか取得できないので、その値をもとにループ処理でデータの取得が必要だった。
・配列をそのままechoで表示すると、"Array"と表示されてしまうので、current関数を使うとうまく表示ができた。
ランダムのデータ取得は奥が深そうだが、一旦これでよしとする。
・以下参考にさせていただきました
http://kihon-no-ki.com/get-value-at-random-from-array
http://bluesky.holy.jp/blog/bluesky/2015/07/20150729.html
http://doremi.s206.xrea.com/php/tips/array.html
http://qiita.com/shuntaro_tamura/items/784cfd61f355516dfff0