Bir işlevi Deşifre

3 Cevap php

Kısa bir süre önce, bir beyefendi bir soruya cevap olarak bu işlevi yayınlanmıştır. Bir öğrenci olarak, ben işlevini anlamak ilgileniyorum. Ancak, olduğu gibi işe alınamıyor. Poster o fonksiyonunu test vardı, bu yüzden yönünü göstermek amacıyla bir "kavramsal" post, olabilirdi söylemedi. OTOH, ben doğru çağırarak olabilir. Onu anlamak için çalışırken biraz zaman geçirdim gibi yardımcı olun.

($ Data dizi Ben sadece işlevi çalıştırmak için koymak biridir.)

Teşekkürler!

<?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 Cevap

Öncelikle, veri yanlıştır. Işlev değişken olarak diziler bir dizi alır.

Satırını not

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

... Bu işlev çağrısı da yanlıştır; ilk elemanı alarak olmaMAlıdır bu diziden tuşlarını kullanarak beri, o, tüm dizi alınması gerekir.

Bu deneyin: Önce, tüm dizi kullanmak için array_keys için çağrı değiştirmek, yani

foreach(array_keys($data AS $key)

sonra giriş ve işlev çağrısı değiştirin:

$data= array(
  'data1' => array('one','two','three'),
  'data2' => array('four','five','six'),
  'data3' => array('seven','eight','nine')  
);
echo render_table($data);

Bu şekilde deneyin:

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

?>

Temelde $ verilerin bir tablo görünümü oluşturur.

Işlevi, kendisine iletilen verileri görüntülemek için bir tablo oluşturur. Senin kodunda, sahip

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

Ancak, $html Bu durumda boştur. Eğer bu gibi bir değişkene işlevin dönüş değeri atamak sürece render_table işlev oluşturulan değişken fonksiyon dışında geçmedi:

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

Sonra tablo HTML yankıları.