人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPに詳しい方宜しくお願いします。
以前下記ランダムスクリプトについて質問させていただきました。配列の部分などは理解できたのですが、画像を2列以上並べようとすると上手く表示されません。テキストリンクのみだと上手く表示されるのですが…画像リンクを表示させるには何か追加が必要でしょうか?cssの設定になるのでしょうか?宜しくお願いします。
<?php
// rndtxtには、テキストを入れる。改行はしないようにする
// テキストを増やしたりする場合は、"[ ]"の数字が0から順になるようにする
$rndtxt[0] = 'テキスト1';
$rndtxt[1] = 'テキスト2';
$rndtxt[2] = 'テキスト3';
$rndtxt[3] = 'テキスト4';
$rndtxt[4] = 'テキスト5';
$rndtxt[5] = 'テキスト6';
$rndtxt[6] = 'テキスト7';

for ($i = 1 ; $i <= 3 ; $i++){
$length = count($rndtxt) - 1;
srand( (double)microtime()*1000000 );
$num=round( rand(0,$length) );
print("$rndtxt[$num]");
if ($i % 1 == 0){
print"<br>";
} else {
print"&nbsp;";
}
for ($j = $num ; $j <= $length ; $j++){
$rndtxt[$j] = $rndtxt[$j+1];
}
unset($rndtxt[count($rndtxt) - 1]);
}
?>

●質問者: praide
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:DOUBLE PHP print Rand スクリプト
○ 状態 :終了
└ 回答数 : 6/6件

▽最新の回答へ

1 ● vector
●20ポイント

$i % 1 == 0 って、絶対にtrueになるハズです。

必ず>br<が出力されるので、そのせいではないでしょうか?


そもそも画像リンクを出力しているロジックには見えませんが。


補足

PHP4.2.0以降ですが、srand()を行わなくても、現在の仕様でrand()の中で同じことを行っているため省略可能です。

またrand()でとるよりも、何も考えずに配列の中からランダムで、という場合にはarray_rand()のほうがすっきりします。

array_rand

◎質問者からの返答

テキスト部分にHTMLを入れると画像等は表示されます。brの出力をなくすにはどうすればよいでしょうか?初心者ですいません。


2 ● moke3rd
●20ポイント

こんな感じでどうでしょうか?

画像は「image1.gif」等の部分を変更してください。

画像へのリンクの例ですが、画像を表示する場合は「画像1」等の部分を変更します。

うまくいかないというのは画像が表示されないということでしょうか?

アドレスの指定が間違っているということはないでしょうか?

確認してみてください。

<?php

// rndtxtには、テキストを入れる。改行はしないようにする

// テキストを増やしたりする場合は、"[ ]"の数字が0から順になるようにする

$rndtxt[0] = '<a href="image1.gif">画像1</a>';

$rndtxt[1] = '<a href="image2.gif">画像2</a>';

$rndtxt[2] = '<a href="image3.gif">画像3</a>';

$rndtxt[3] = '<a href="image4.gif">画像4</a>';

$rndtxt[4] = '<a href="image5.gif">画像5</a>';

$rndtxt[5] = '<a href="image6.gif">画像6</a>';

$rndtxt[6] = '<a href="image7.gif">画像7</a>';

for ($i = 1 ; $i <= 3 ; $i++){

$length = count($rndtxt) - 1;

srand( (double)microtime()*1000000 );

$num=round( rand(0,$length) );

print("$rndtxt[$num]");

if ($i % 1 == 0){

print"<br>";

} else {

print" ";

}

for ($j = $num ; $j <= $length ; $j++){

$rndtxt[$j] = $rndtxt[$j+1];

}

unset($rndtxt[count($rndtxt) - 1]);

}

?>

◎質問者からの返答

すいません。質問の仕方がまずかったかも知れません。画像は表示されるのですが、$num=round( rand(2,$length) );としても一列表示で表示されてしまい、困っています。


3 ● sera_yr
●20ポイント

if ($i % 1 == 0){

この部分の1を2にすると、写真2枚を表示したあとにbrが出力され、3にすると、写真3枚を表示したあとにbrが出力されます。

brを一切出力せずに、横一列に画像を表示させたい場合は、以下の部分をコメントアウトします。 だけ必要であれば、print" ";だけコメントを除外します。

//if ($i % 1 == 0){

//print"<br>";

//} else {

//print" ";

//}

◎質問者からの返答

なるほど。brが何個目で出力されるかですね!

ありがとうございます。


4 ● vector
●20ポイント

横一列に表示できればよろしいのでしょうか?

それとも、横に何個かまで表示して、改行するのでしょうか?

$rndtxt[] = 'テキスト1';
$rndtxt[] = 'テキスト2';
$rndtxt[] = 'テキスト3';
$rndtxt[] = 'テキスト4';
$rndtxt[] = 'テキスト5';
$rndtxt[] = 'テキスト6';
$rndtxt[] = 'テキスト7';

for ($i = 0; $i < 3; $i++) {
 $num = array_rand($rndtxt);
 print $rndtxt[$num];
 if ($i % 横に並べる数 == 0) {
 print '<br>';
 } else {
 print '&nbsp;';
 }

 // 以下のコードはwarningが出るのでは?
 for ($j = $num; $j < count($rndtxt); $j++) {
 // 最後は最大要素数外になると思われますが。
 $rndtxt[$j] = $rndtxt[$j + 1];
 }

 pop($rndtxt);
}
◎質問者からの返答

上手く行きました。ありがとうございます。


5 ●
●20ポイント

画像の場合、単純に横に並べようとした場合、ブラウザの幅を超えそうになると自動的に改行されてしまいます。

そのため、brタグで改行を制御する方法は完全ではありません。

ためしに簡単なHTMLを書いて、いくつかの画像を表示させてみれば分かると思います。

今回のようなケースでは、テーブルを使って表示させれば良いと思います。

以下、簡単なサンプルを書いてみました。

<?php
// 配列の設定
$rndtxt[0] = '<img src="./images/a.png">';
$rndtxt[1] = '<img src="./images/b.png">';
$rndtxt[2] = '<img src="./images/c.png">';
$rndtxt[3] = '<img src="./images/d.png">';
$rndtxt[4] = '<img src="./images/e.png">';
$rndtxt[5] = '<img src="./images/f.png">';
$rndtxt[6] = '<img src="./images/g.png">';
// 変数の設定
$shownum = 5; // $shownumは表示させたい数
$colnum = 3; // $colnumは列数を指定する変数
// $cellnumは総セル数を格納する変数
// $cellnumは$colnumで割り切れるようにする
$cellnum = $shownum; 
while ( $cellnum % $colnum != 0 ) {
 $cellnum += 1;
}

// テーブル用の開始タグ出力
print "<table>\n";
print "\t<tr>\n";
// 内容表示処理
for ($i = 1 ; $i <= $cellnum ; $i++){
 $length = count($rndtxt) - 1;
 srand( (double)microtime()*1000000 );
 $num=round( rand(0,$length) );
 // $iが$shownum(表示させたい数)以下であれば、表示
 if ($i <= $shownum) {
 print "\t\t<td>$rndtxt[$num]</td>\n";
 // $iが$shownum(表示させたい数)より大きければ空のセルを出力
 } else {
 print "\t\t<td>&amp;nbsp</td>\n";
 }
 // 列数で割り切れるかどうか判断
 // 割り切れる場合は、行の終了と判断し、trタグを閉じ、
 // 次の行のためにtrタグを出力
 if ($i % $colnum == 0 &amp;&amp; $i != $cellnum){
 print "\t</tr>\n\t<tr>\n";
 // 最終セルの場合、tr開始タグは出力しない
 } elseif ($i == $cellnum) {
 print "\t</tr>\n";
 }
 for ($j = $num ; $j <= $length ; $j++){
 $rndtxt[$j] = $rndtxt[$j+1];
 }
 unset($rndtxt[count($rndtxt) - 1]); 
}
// テーブル用の終了タグ出力
print "</table>\n";
?> 

円記号(バックスラッシュ)n、円記号(バックスラッシュ)tは出力されるHTMLを整形するための改行記号、タブ記号ですので、削除していただいても問題ありません。

& amp ; となっている部分は & です。

参考になれば幸いです。

◎質問者からの返答

ちょっと自分には難しかったですが

上手く行きました。ありがとうございます。


1-5件表示/6件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ