[php] нужен скрипт создания/отображения таблицы

Discussion in 'PHP' started by Thanat0z, 9 Jul 2007.

  1. Thanat0z

    Thanat0z Негрин

    Joined:
    6 Dec 2006
    Messages:
    627
    Likes Received:
    498
    Reputations:
    311
    Нужен скрипт для "псевдографического" отображения таблиц. То есть мне нужно создать табличку типа

    Code:
    ___________________
    |   | A | B | C | D |
    =====================
    | 1 |   |   |   |   |
    ---------------------
    | 2 |   |   |   |   |
    ---------------------
    | 3 |   |   |   |   |
    ---------------------
    | 4 |   |   |   |   |
    
    Данные будут задаваться строками, с разделителем |

    То есть если подать на вход скрипту из текстового файла
    Code:
    № |Название | скорость | Процент | 
    1 |alpha | 700 | 23 | 
    2 |beta | 2000 | 65 | 
    
    то должна создаться таблица

    Code:
    ___________________________________
    | № |Название | скорость | Процент | 
    ====================================
    | 1 |alpha    | 700      | 23      |
    ------------------------------------
    | 2 |beta     | 2000     | 65      |
    Ширина колонки должна выстраиваться по самому длинному значению. Когда-то видел подобные скрипты и даже проги, но не сохранил
    Под рукой нет ни мануалов, ни нормального инета, так что желательно подробные примеры давайте если не полностью скрипт

    ЗЫ знаю что самому мона проставить горизонтальные разделители и пробелы наставлять в ячейках чтоб они все имели одинаковую ширину, но харит меня это дело
     
    #1 Thanat0z, 9 Jul 2007
    Last edited: 9 Jul 2007
  2. hhover

    hhover Elder - Старейшина

    Joined:
    21 May 2007
    Messages:
    60
    Likes Received:
    36
    Reputations:
    11
    PHP:
    <?php

    $file 
    file 'filename.txt' );

    echo 
    "
    <table width='100%' heigth='100%' cellpadding='0' cellspacing='0' border='1'>
    "
    ;

    foreach ( 
    $file as $string )
    {
      
      
    $string trim $string );
      
    $string_array explode "|"$string );
      
      echo 
    "
      <tr>
      "
    ;

      foreach ( 
    $string_array as $column )
      {
        
        
    $column trim $column );
        if ( 
    $column == '' )
        {
          
    $column '&nbsp;';
        }
        
        echo 
    "
        <td>
          
    $column
        </td>
        "
    ;
        
      }
      
      echo 
    "
      </tr>
      "
    ;

    }

    echo 
    "
    </table>
    "
    ;

    ?>
     
    1 person likes this.
  3. Thanat0z

    Thanat0z Негрин

    Joined:
    6 Dec 2006
    Messages:
    627
    Likes Received:
    498
    Reputations:
    311
    Нет, совсем не то, говорю же что надо в текстовом формате, пример привел
     
  4. ant0ha

    ant0ha Elder - Старейшина

    Joined:
    22 May 2007
    Messages:
    130
    Likes Received:
    50
    Reputations:
    13
    Мда, чтобы без таблиц (<tr><td>...</td></tr>) такой скрипт сделать нужно пару часиков голову поломать. ИМХО, нужно разбивать весь файл построчно в массив как делал hhover, затем каждые элементы строчки разделенные | перенести в отдельные массивы, найти в этих массивах самые длинные элементы(сравнивая значения длины каждого элемента массива полученных через функцию strlen), узнать их длину, потом посчитать сколько символов не хватает остальным элементам этого массива до нужной длины и добавить к ним нужное количество пробелов, и потом наконец вывести это все на экран. Тут циклов до ж**ы получится, темболее что входной текстовый файл наверняка не маленький.

    И потом, код который писал hhover делает тоже самое, только немного в другом виде.
     
    1 person likes this.
  5. hhover

    hhover Elder - Старейшина

    Joined:
    21 May 2007
    Messages:
    60
    Likes Received:
    36
    Reputations:
    11
    ant0ha,
    Можно и попроще...

    Thanat0z,
    Не знаю насколько адекватно будет реагировать на ошибки, но в случае валидных входных данных работает исправно:
    PHP:
    <?php

    $main_array 
    file 'filename.txt' );

    foreach ( 
    $main_array as $key => $row )
    {

      
    $row trim $row );
      
    $columns explode "|"$row );

      foreach ( 
    $columns as $k => $column )
      {

        
    $column trim $column );
        
    $table[$key][$k] = $column;

        
    $strlen strlen $column );
        if ( 
    $strlen $table['len'][$k] )
        {
          
    $table['len'][$k] = $strlen;
        }

      }
      
    }

    foreach ( 
    $table['len'] as $int )
    {
      
    $max_len += $int;
    }
    $max_len += count $table['len'] ) * 3;
    $max_len += 1;

    $row_str str_pad ''$max_len'-' );


    echo 
    "
    <pre>
    "
    ;

    echo 
    $row_str;
    foreach ( 
    $table as $key => $row )
    {
      echo 
    "\r\n";
      echo 
    "|";

      foreach ( 
    $row as $k => $column )
      {
        
    $column str_pad $column$table['len'][$k] );
        echo 
    " " $column " |";
      }

      echo 
    "\r\n";
      echo 
    $row_str;
    }

    echo 
    "
    </pre>
    "
    ;

    ?>
     
  6. hhover

    hhover Elder - Старейшина

    Joined:
    21 May 2007
    Messages:
    60
    Likes Received:
    36
    Reputations:
    11
    Пример файла:
    Code:
    N |Название | скорость | Процент 
    1 |alpha | 700 | 23 
    2 |beta | 2000 | 65