我有一个仅使用文本文件填充的html表,基本上主要按时间戳排序。 我想选择通过名为“Server”的列($ keys)对表数据进行排序,这样我就可以根据服务器名称查看排序数据。由于这不是使用mysql,我不能使用'order by',有没有办法做到这一点?你是如何在PHP中做到这一点的?
以下是我的一些代码,展示了我的表格是如何创建的:
$keys = array('Server', 'Target','Set','Time', 'Length','Size','Status');
echo '<table id="stats_1"><tr>';
foreach ($keys as $column)
echo '<th>' . $column . '</th>';
echo '</tr>';
$counter=0;
foreach ($data as $row){
$counter ++;
$class = $counter % 2 === 0 ? 'alt1' : 'alt2';
echo '<tr class="' . $class . '">';
foreach ($keys as $column){
if (isset($row[$column])){
echo '<td>' . $row[$column] . '</td>';
} elseif ($column == 'Status') {
echo '<td> Check Logs </td>';
} elseif ($column == 'Length') {
echo '<td> n/a </td>';
} elseif ($column == 'Size') {
echo '<td> n/a </td>';
} else {
echo '<td> </td>';
}
}
}
echo '</table>';
答案 0 :(得分:0)
答案 1 :(得分:0)
如果你想在PHP中进行操作,请查看usort
,并让用户提供字段以使用GET变量进行排序。如果您在一个页面中拥有所有数据,则提供的JavaScript解决方案既可以降低服务器负载,又可以提高用户满意度。没理由你不能两者兼顾;)
一个例子是(不要复制/粘贴,只是为了这个目的的插图,虽然我确实建在更常见的安全防护装置):
class KeySorter {
private $valids;
private $key;
function __construct($valids){
$this->valids = $valids;
$this->key = reset($this->valids);
}
function setKey($key){
if(in_array($key, $this->valids)) $this->key = $key;
}
function compare($a,$b){
return strcmp($a[$this->key],$b[$this->key]);
}
function getValids(){
return $this->valids;
}
}
$keys = array('Server', 'Target','Set','Time', 'Length','Size','Status');
$data = array(...your array....);
$sorter = new KeySorter($keys);
if(isset($_GET['sort'])){
$sorter->setKey($_GET['sort']);
}
usort($data,array($sorter,'compare'));
echo '<table><thead><tr>';
foreach($sorter->getValids() as $sortkey){
echo '<th><a href="'
.htmlspecialchars(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), ENT_QUOTES)
.'?sort='.urlencode($sortkey)
.'">'.$sortkey.'</a></th>';
}
echo '</tr></thead>';