2010-01-24 2 views
4

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

(массив $ данных один, что я просто положить в, чтобы запустить функцию.)

<?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; 
    } 

    ?> 

ответ

5

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

Обратите внимание на линии

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); 
+0

Да! Это делает трюк. Я не понимал, что функция предназначена для работы с многомерными массивами. Таким образом, ошибки были 1. Как я пытался вызвать функцию; 2. Я поставил неверный тип массива; и 3. строка: foreach (array_keys ($ data AS $ key). Большое спасибо! – dave

2

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

<?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; 
} 

?> 

Это в основном создает вид таблицы в $ данных ,

+0

Спасибо за ответ. Я все еще получаю ошибки: Предупреждение: array_keys() [function.array-keys]: первым аргументом должен быть массив в E: \ Wamp \ www \ temp \ temp.php в строке 22 Предупреждение: недействительно аргумент, предоставленный foreach() в E: \ Wamp \ www \ temp \ temp.php в строке 29 – dave

1

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

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

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

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

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

+0

Спасибо. Я считаю, что предыдущие ответы также предлагали это как часть его ответа, но я все еще не получаю его на работу. Имеет ли он какое-либо отношение к числовым и ассоциативным. массив? – dave

Смежные вопросы