将PHP转换为数组并遍历

时间:2018-07-21 18:11:46

标签: php

我正在为我们的空手道学校开发一个应用程序,希望从数据库中获取技术名称,将其以随机顺序存储在一个数组中,并能够单击一个按钮以在整个数组中移动一个时间。

我以几种不同的方式考虑了这一点,包括只是从数据库中随机进行,这很容易,但是它多次提取相同的技术,而我只希望执行一次。

下面的示例代码按其应有的方式随机列出了它们,当我刷新浏览器时,它会按照我的意愿创建一个新列表。现在,我想知道如何一次只显示一个,并将其保留在浏览器中,直到所有内容都通过为止。

$sqlQuery= "Select * from Techniques Order BY Rand()";
$statement = $db->prepare($sqlQuery);
$statement->execute();
while($row = $statement->fetch(PDO::FETCH_ASSOC)):
    $techniqueName = $row['Technique_name'];
?>
    <ul>
    <li><?php echo $techniqueName; ?></li>
    </ul>
<?php endwhile; ?>

我真的不知道这是否有意义。如果可能的话,我也想远离javascript,尽管这并不是必须的。基本上,这是一个有趣的小游戏构想,它使学生可以练习而不必多次练习相同的技术,而不会错过其他练习。

任何想法都将不胜感激。

1 个答案:

答案 0 :(得分:3)

如果要“远离javascript”,可以将值保存在存储在会话中的数组中。重新加载时,将读取会话中的数组,并从中弹出一个随机值。在每次请求时,会话中的数组都会变小,直到该数组为空。然后,您可以从数据库中重新加载一组新技术。源代码如下所示:

<?php
session_start();
if (!isset($_SESSION['data'])) {
    /*
     * Access the database here. For testing purposes
     * create a dummy array instead
     */
    $array = range(1, 10);
    shuffle($array);
    $_SESSION['data'] = $array;
}
$value = array_pop($_SESSION['data']);
if (!count($_SESSION['data'])) {
    // array is empty, delete it so a new one gets created on the next request
    unset($_SESSION['data']);
}

echo "The current value is: ".$value."<br />\n";

// only for debugging:
if (isset($_SESSION['data'])) {
    var_dump($_SESSION['data']);
} else {
    echo "No array in 'data' set\n";
}

如果要使用javascript,可以将所有值加载到javascript数组中。然后,您可以使用javascript遍历数组并显示所需的值,直到到达结尾为止。之后,您可以发送一个新请求,以从数据库中获取一组新技术。