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]);
}
?>

回答の条件
  • 1人2回まで
  • 登録:2006/10/17 16:17:33
  • 終了:2006/10/18 11:15:16

回答(6件)

id:vector_xenon No.1

vector回答回数113ベストアンサー獲得回数42006/10/17 17:03:19

ポイント20pt

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

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


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


補足

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

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

array_rand

id:praide

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

2006/10/17 18:02:12
id:moke3rd No.2

moke3rd回答回数34ベストアンサー獲得回数32006/10/17 17:53:52

ポイント20pt

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

画像は「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]);

}

?>

id:praide

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

2006/10/17 18:21:53
id:sera_yr No.3

sera_yr回答回数123ベストアンサー獲得回数62006/10/17 19:31:32

ポイント20pt

if ($i % 1 == 0){

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

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

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

//print"<br>";

//} else {

//print" ";

//}

id:praide

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

ありがとうございます。

2006/10/18 11:10:54
id:vector_xenon No.4

vector回答回数113ベストアンサー獲得回数42006/10/17 19:34:11

ポイント20pt

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

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

$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);
}
id:praide

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

2006/10/18 11:13:55
id:bonlife No.5

回答回数421ベストアンサー獲得回数752006/10/17 20:07:22

ポイント20pt

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

そのため、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 ; となっている部分は & です。

参考になれば幸いです。

id:praide

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

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

2006/10/18 11:14:02
id:moke3rd No.6

moke3rd回答回数34ベストアンサー獲得回数32006/10/18 09:23:16

ポイント10pt

再度失礼します。

列数の変更は以前の質問の通り

if ($i % 1 == 0){

の部分の「1」を変更するのですよ?

3列なら「1」を「3」にです。

id:praide

上手くいきました。

すいません。ありがとうございます。

2006/10/18 11:14:04

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません