【问题标题】:How to shuffle file before each session?如何在每次会话之前随机播放文件?
【发布时间】:2015-12-14 21:09:43
【问题描述】:

我在这个论坛上搜索了一整天,但找不到任何答案。

我使用以下 php 代码在每个页面加载时显示来自 myfile.txt 的下一行(遍历整个文件时循环):

<?php
session_start();
$item = file("myfile.txt");
$itemCount = count($item);

if ($_SESSION['sess_row'] === NULL) {
$_SESSION['sess_row'] = 0;
} else {
$_SESSION['sess_row'] = ($_SESSION['sess_row'] + 1) % $itemCount;
}

echo $item[$_SESSION['sess_row']];
?>

现在我想在每个会话之前将myfile.txt 中的行洗牌。

例如,如果myfile.txt 包含 5 行,现在它会在每个会话中以相同的顺序显示行:123451234512345...

使用 shuffle 它应该显示一个会话:325413254132541...,另一个会话:413254132541325...,另一个会话:142351423514235...,等等。

如何在每次会话之前将上述代码更改为随机播放myfile.txt

【问题讨论】:

  • 每次会话还是每次刷新页面?
  • 你不应该打乱文件,而是打乱输出。您是否考虑过并发用户?
  • 一个数据库的效率将提高十亿倍

标签: php shuffle


【解决方案1】:

每次使用shuffle 洗牌。

$item = file("myfile.txt");
shuffle($item);

如果您需要为每个用户分配不同的编号,您应该有一个数据库或其他东西(它可能只是一个包含一个编号的文件)来跟踪您已经分配给用户的项目数量。每次,读取该数字(称为游标),分配与该游标关联的数字,将游标加一并将其写回文件(或数据库...)

【讨论】:

  • 对不起,我试过了,但它不起作用,用 shuffle($item);它只是随机显示:353321411213551... 我的目标是在所有行都通过之前不显示同一行两次。
  • 这是另一个你无法通过随机化解决的问题。
  • 我在答案中添加了更多关于此的信息。
【解决方案2】:

如果需要唯一数据,可以使用array_unique

$item = file("myfile.txt");
$item = array_unique($items);
shuffle($item);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多