$a[0]?$a[2]を$m回繰り返して表示するプログラムです。
<?php $a[0] = "おはよう"; $a[1] = "こんにちは"; $a[2] = "こんばんわ"; $m = 10; //繰り返す回数 $n = count($a); for ($j = 0; $j < $m; $j++) { for ($i = 0; $i < $n; $i++) { echo $a[$i]; echo "<br />\n"; } } ?>
うーん
<?php $a[0] = 'おはよう'; $a[1] = 'こんにちは'; $a[2] = 'こんばんわ'; $cookiename = 'hateq'; $expires = time() + 10; $counter; $val = 0; if (isset($_COOKIE[$cookiename])) { $val = $_COOKIE[$cookiename]; $counter = $val; if ($counter >= count($a) - 1) { $counter = 0; } else { $counter++; } } else { $counter = 1; } setcookie($cookiename, $counter, $expires); echo $a[$val];
$a[0] = 'おはよう';
$a[1] = 'こんにちは';
$a[2] = 'こんばんわ';
$cookiename = 'hateq';
$expires = time() + 10;
$counter;
$val = 0;
if (isset($_COOKIE[$cookiename])) {
$val = $_COOKIE[$cookiename];
$counter = $val;
if ($counter >= count($a) - 1) {
$counter = 0;
} else {
$counter++;
}
} else {
$counter = 1;
}
setcookie($cookiename, $counter, $expires);
echo $a[$val];
Add Star
id:kakero
・・・
今回のように繰り返す場合、単純に回数を数えて、その剰余で状態を変えるのが王道だと思うけど?
$cnt = ... $msg = array( 'おはよう', 'こんにちは', 'こんばんは', // 「こんばんわ」は間違いだと思う ); print $msg[$cnt++ % 3]; // $msg[$cnt++ % count($msg)] でも可
整数のオーバーフローを考慮しなければいけない状況なら、剰余を元の変数に戻せばいいだけだし...
__http://php.net/manual/ja/language.types.integer.php#language.types.integer.overflow
アクセスしてきた人を特定せず、単純に「最初のアクセスは...2回目のアクセスは...」というようにやるなら、ローカルにアクセス回数を記録するファイルを作って、その値で表示する文字列を変更するという手で出来ます。
$filename = 'count.txt'; $msg = array( 'おはよう', 'こんにちは', 'こんばんは', ); $fp = fopen($filename, 'c+b');// PHP5.2.6 以降 flock($fp, LOCK_EX); $cnt = (int)fgets($fp); print $msg[$cnt % 3]; $cnt += 1; fseek($fp, 0); ftruncate($fp, 0); fwrite($fp, $cnt); fflush($fp); flock($fp, LOCK_UN);// PHP 5.3.2 以降はアンロックを自力でやる必要がある fclose($fp);
マニュアルにはロックに失敗した場合の処理があるが、基本的にロックは失敗しないんじゃないかなぁ?
失敗するとしたら、オープンできなかった場合だと...
特定の人(というよりもブラウザ)からのアクセスを見分けて、その人の「最初の...」であるなら、アクセス元を区別する為に Cookie を使ってアクセス元に「○回目のアクセス」を記憶しておいてもらうのが普通でしょう。
ただし、Cookie が使えない端末(使わない設定にしてあるを含む)もあり、その場合は毎回初めてとして処理されます。
__これは他の回答者さんと同じ
__No.3 さんは投稿ミス?それとも悪質回答者?
$msg = array(
'おはよう',
'こんにちは',
'こんばんは',
);
$cookiename = 'takaniiCount';
$available = 5; // 有効な時間(秒単位)
// この時間内の再アクセスの場合に「次の文字列」に変わる
$cnt = isset($_COOKIE[$cookiename]) ? ($_COOKIE[$cookiename]) : 0;
print $msg[$cnt++ % 3];
setcookie($cookiename, $cnt, time()+$available);
有効時間を短く設定すると、その短い時間内での再アクセスじゃないと次の文字列に切り替わりません。つまり、チョッと間をおいてしまうと最初に戻ってしまう。
長めにすると、久しぶりのアクセスでも忘れずに「次の文字列」へ切り替えてくれます。
どんな用途を想定しているのかは質問文からは解りませんので、どんな設定(数秒、数分、数時間、24時間、一週間、一ヶ月...)にするかはお考えください。
Cookie にアクセス時間も入れるようにしておけば、短時間での再アクセスは同じ文字列を表示し、ある程度時間が経過してからの再アクセスの場合に次の文字列を表示するという事も可能です。
アクセスする度に$a[0]?$a[2]を繰り返して表示するプログラムです。
<?php $fname = 'counter.txt'; $a[0] = "おはよう"; $a[1] = "こんにちは"; $a[2] = "こんばんわ"; $n = count($a); $fp = fopen($filename, 'w+'); $i = fgets($fp); if ($i == '' || $i >= $n) $i = 0; echo $a[$i]; echo "<br />\n"; $i++; fwrite($fp, $i); fclose($fp); ?>