Как сделать HTML столбец таблицы сортируемый в PHP? - PullRequest
1 голос
/ 01 октября 2010

У меня есть HTML-таблица, которая заполняется только с помощью текстового файла и в основном сортируется в основном по отметке времени.Мне бы хотелось также отсортировать данные таблицы по столбцу ($ 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>';

Ответы [ 2 ]

0 голосов
/ 01 октября 2010

Если вы хотите сделать в 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>';
0 голосов
/ 01 октября 2010

Вы можете изучить использование таблиц данных, если у вас все в порядке с jQuery. Flexigrid ( demo ) и jqGrid ( demo ) - два очень хороших плагина для одного и того же. Я рекомендую использовать jqGrid. Имеет очень хорошую документацию и легко настраивается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...