Bir html tablo çıktı bir php çok boyutlu dizi

3 Cevap php

Ben artık neredeyse bir hafta boyunca bu biriyle kafamı duvara vurarak, ve ben ilk gündü daha yakın değilim edilmiştir.

Ben 8 sütun ve ben güzel bir şekilde biçimlendirilmiş e-posta istemcisi e-posta için gereken satır bir değişken sayıda bir form var. Form çok boyutlu bir dizi olarak gerekli alanları sunar. Kaba bir örnek aşağıdadır:

<input name="order[0][topdiameter]" type="text" id="topdiameter0" value="1" size="5" />
<input name="order[0][bottomdiameter]" type="text" id="bottomdiameter0" value="1" size="5" />
<input name="order[0][slantheight]" type="text" id="slantheight0" value="1" size="5" />
<select name="order[0][fittertype]" id="fittertype0">
    <option value="harp">Harp</option>
    <option value="euro">Euro</option>
    <option value="bulbclip">Regular</option>
</select>
<input name="order[0][washerdrop]" type="text" id="washerdrop0" value="1" size="5" />
<select name="order[0][fabrictype]" id="fabrictype">
    <option value="linen">Linen</option>
    <option value="pleated">Pleated</option>
</select>
<select name="order[0][colours]" id="colours0">
    <option value="beige">Beige</option>
    <option value="white">White</option>
    <option value="eggshell">Eggshell</option>
    <option value="parchment">Parchment</option>
</select>
<input name="order[0][quantity]" type="text" id="quantity0" value="1" size="5" />

Bu form, tablo biçimlendirilir ve satırlar dinamik olarak eklenebilir. Ne yapmak yapamaz oldum dizinin dışına düzgün biçimlendirilmiş bir tablo olsun.

Bu benim (net yakaladı) şimdi kullanıyorum budur.

<?php
if (isset($_POST["submit"])) {
$arr= $_POST['order']
echo '<table>';
foreach($arr as $arrs)
    {
    echo '<tr>';
    foreach($arrs as $item)
    {
        echo "<td>$item</td>";
    }
    echo '</tr>';
    }

echo '</table>;
};
?>

Bu verilerin tek bir satır için mükemmel çalışıyor. Ben formdan 2 ya da daha fazla satır göndererek çalışırsanız o sütunlardan biri kaybolur. Ben tablo olarak biçimlendirilmiş olmak istiyorum:

| top | Bottom | Slant | Fitter | Washer | Fabric | Colours | Quantity |
------------------------------------------------------------------------
|value| value  | value | value  | value  | value  |  value  |  value   |

Gerektiğinde ek satır ile. Ama tablo bu tür üretecek herhangi bir örnek bulamıyorum!

Bu oldukça basit bir şey olması gerektiği gibi görünüyor, ama ben sadece çok ihtiyacınız şekilde çalışır bir örnek bulamıyorum.

3 Cevap

HTML olarak, böyle bir şey deneyin:

<table>
<tr>
  <th>Bottom</th>
  <th>Slant</th>
  <th>Fitter</th>
</tr>
<?php foreach ($_POST['order'] as $order): ?>
  <tr>
    <td><?php echo $order['bottomdiameter'] ?></td>
    <td><?php echo $order['slantheight'] ?></td>
    <td><?php echo $order['fittertype'] ?></td>
  </tr>
<?php endforeach; ?>
</table>

Açıkçası, ben orada tüm niteliklerini dahil değilim, ama umarım anladınız.

Bu nasıl?

$keys = array_keys($_POST['order'][0]);
echo "<table><tr><th>".implode("</th><th>", $keys)."</th></tr>";
foreach ($_POST['order'] as $order) {
  if (!is_array($order))
    continue;
  echo "<tr><td>".implode("</td><td>", $order )."</td></tr>";
}
echo "</table>

Ben bir süre önce yazdığım bir tablo sınıfı

<?php
class Table {
    protected $opentable = "\n<table cellspacing=\"0\" cellpadding=\"0\">\n";
    protected $closetable = "</table>\n";
    protected $openrow = "\t<tr>\n";
    protected $closerow = "\t</tr>\n";

    function __construct($data) {
        $this->string = $this->opentable;
        foreach ($data as $row) {
            $this->string .= $this->buildrow($row);
        }
        $this->string .= $this->closetable;
    }

    function addfield($field, $style = "null") {
        if ($style == "null") {
            $html =  "\t\t<td>" . $field . "</td>\n";
        } else {
            $html = "\t\t<td class=\"" . $style . "\">"  . $field . "</td>\n";
        }
        return $html;
    }

    function buildrow($row) {
        $html .= $this->openrow;
        foreach ($row as $field) {
            $html .= $this->addfield($field);
        }
        $html .= $this->closerow;
        return $html;
    }

    function draw() {
        echo $this->string;
    }
}
?>

Bu gibi kullanılacak:

<body>
<?php
$multiDimArray = []; # Turn the form array into a matrix
for ($i = 0; $i < count($_POST['order']); $i++) {
        $multiDimArray[] = [];
    foreach ($_POST['order'][$i] as $key=>$value) {
        if ($i == 0) {
            $multiDimArray[$i][] = $key;
        }
        $multiDimArray[$i][] = $value;
    }
}

$table = new Table($multiDimArray); # Create and draw the table
$table->draw();
?>
</body>