Расшифровка функции - PullRequest
       5

Расшифровка функции

4 голосов
/ 24 января 2010

Некоторое время назад эта функция была опубликована в ответе на вопрос. Как ученик, я заинтересован в понимании функции. Тем не менее, я не могу заставить его работать как есть. На плакате не было сказано, что он проверил функцию, поэтому это мог быть «концептуальный» пост, предназначенный для указания направления. OTOH, я не могу ссылаться на это правильно. Пожалуйста, помогите, поскольку я потратил некоторое время, пытаясь понять это.

(Массив $ data - это тот, который я просто вставил для запуска функции.)

<?php

    $data = array("a" => "January", "b" => "February", "c" => "March" );

    render_table ( $data ) ;
    echo $html ;

    //===========================================

    function render_table($data) {
      $html = '<table>';
      $tr = array();
      foreach (array_keys($data[0]) as $key) {
        $tr[] = '<th>' . htmlspecialchars($key) . '</th>';
      }
      $html .= "\n" . '<thead>' . "\n" . '<tr>' . "\n" . implode("\n", $tr) . '</tr>' . '</thead>';
      $tbody = array();
      foreach ($data as $row) {
        $tr = array();
        foreach ($row as $value) {
          $tr[] = '<td>' . htmlspecialchars($value) . '</td>';
        }
        $tbody[] = '<tr>' . "\n" . implode("\n", $tr) . '</tr>';
      }
      $html .= "\n" . '<tbody>' . "\n" . implode("\n", $tbody) . '</tbody>';
      $html .= '</table>';
      return $html;
    }

    ?>

Ответы [ 3 ]

5 голосов
/ 24 января 2010

Во-первых, ваши данные неверны. Функция принимает в качестве аргумента массив массивов.

Обратите внимание на строку

  foreach (array_keys($data[0]) as $key) {

... этот вызов функции также неверен; он НЕ должен брать первый элемент, он должен брать весь массив, так как он использует ключи из массива.

Попробуйте: сначала измените вызов array_keys, чтобы использовать весь массив, т.е.

foreach(array_keys($data AS $key)

затем измените ваш ввод и вызов функции:

$data= array(
  'data1' => array('one','two','three'),
  'data2' => array('four','five','six'),
  'data3' => array('seven','eight','nine')  
);
echo render_table($data);
2 голосов
/ 24 января 2010

Попробуйте так:

<?php

$data = array("a" => "January", "b" => "February", "c" => "March" );

$html = render_table ( $data ) ;
echo $html ;

//===========================================

function render_table($data) {
  $html = '<table>';
  $tr = array();
  foreach (array_keys($data[0]) as $key) {
    $tr[] = '<th>' . htmlspecialchars($key) . '</th>';
  }
  $html .= "\n" . '<thead>' . "\n" . '<tr>' . "\n" . implode("\n", $tr) . '</tr>' . '</thead>';
  $tbody = array();
  foreach ($data as $row) {
    $tr = array();
    foreach ($row as $value) {
      $tr[] = '<td>' . htmlspecialchars($value) . '</td>';
    }
    $tbody[] = '<tr>' . "\n" . implode("\n", $tr) . '</tr>';
  }
  $html .= "\n" . '<tbody>' . "\n" . implode("\n", $tbody) . '</tbody>';
  $html .= '</table>';
  return $html;
}

?>

Это в основном создает табличное представление $ data.

1 голос
/ 24 января 2010

Функция создает таблицу для просмотра переданных ей данных. В вашем коде у вас есть

...
render_table ( $data ) ;
echo $html ;

Однако $html в этом случае пусто. Переменная, созданная в функции render_table, не передается за пределы функции, если только вы не присвоите возвращаемое значение функции переменной, как показано ниже:

...
$html = render_table ( $data ) ;
echo $html ;

Затем повторяется таблица HTML.

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