我正在使用PHP动态创建一些选择下拉列表。
<select name="player_id" style="width:140px;">
<?php usort($players, 'compareName'); ?>
<?php foreach ($players as $player) { ?>
<option value="<?php echo $player['id']; ?>"><?php echo $player['first_name'] . " " . $player['last_name']; ?></option>
<?php } ?>
</select>
$ players阵列目前有大约1600条记录。选择下拉列表创建大约20次,这意味着它会在1600条记录中循环20次。
我的问题是关于加载时间..是否有一种方法可以创建相同的选择一次然后反复输出以改善加载时间而不是每次循环?或者这会被认为是最佳做法吗?
答案 0 :(得分:1)
当然!您可以加载一次,将其保存在变量中并在需要的地方回显它!
您可以按照以下方式执行此操作:
<?php
$long_options_list = "";
usort($players, 'compareName');
foreach ($players as $player) {
$long_options_list .= '<option value="'.$player['id'].'">'. $player['first_name'] . " " . $player['last_name'].'</option>';
}
?>
使用如下:
<select name="player_id" style="width:140px;">
<?php echo $long_options_list; ?>
</select>
关于排序,如果您只使用usort
一次会对您的表现造成太大影响,但在您的查询中使用ORDER BY
肯定是最佳选择!
答案 1 :(得分:1)
为了给你一些代码来说明如何保存动态html的输出,试试这样的事情:
<?php
//ignore this, I'm just generating some players as an example.
$players = array();
for ($i=0; $i < 1600 ; $i++) {
$players[] = array("first_name" => uniqid(), "last_name" => uniqid(), "id" => $i);
}
ob_start();
?>
<select name="player_id" style="width:140px;">
<?php usort($players, 'compareName'); ?>
<?php foreach ($players as $player) { ?>
<option value="<?php echo $player['id']; ?>"><?php echo $player['first_name'] . " " . $player['last_name']; ?></option>
<?php } ?>
</select>
<?php
$list = ob_get_clean();
echo $list;
echo $list;
?>
此外,如果你的表现是你想要弄清楚的,那么使用数据库而不是用户来订购它们也会有所帮助。只要您比较它们的方式可以由您的数据库完成,并且它已正确编入索引。
答案 2 :(得分:1)
如果玩家在数据库中,那么当你ORDER BY
SELECT
时,请使用{{1}}让数据库引擎为你订购。
添加索引以加快速度。即使有这么多的玩家,引擎也有办法在内存中缓存信息,所以你会注意到你当前情况的改善。
希望这有帮助。