çok boyutlu diziler php başvurulan tablolar çapraz?

2 Cevap php

nasıl gibi çok boyutlu bir dizi dönüş yok:

$fruits['apples']['blue'] = 24;
$fruits['bananas']['blue'] = 12;
$fruits['apple']['red'] = 34;
$fruits['gooseberries']['orange'] = 4;
$fruits['oranges']['red'] = 12;

: çapraz başvurulan tablo gibi içine

alt text

Teşekkürler!

2 Cevap

$cols = array('blue', 'red', 'orange');
echo '<table>';
echo '<thead><tr><td></td><th scope="col">' . implode('</th><th scope="col">', $cols) . '</th></tr></thead>';
echo '<tbody>';
foreach($fruits as $label => $row)
{
    echo '<tr>';
    echo '<th scope="row">' . $label . '</th>';
    foreach($cols as $k)
    {
      echo '<td>' . (isset($row[$k]) ? $row[$k] : 0) . '</td>';
    }
    echo '</tr>';
}
echo '</tbody>';
echo '</table>';

Bazı HTML kaçan ve bu isteyeceksiniz, ama bunun özü budur.

Sizin dizi kötü tasarlanmıştır. Nasıl bir apples apple olarak aynı olduğunu bilmeli. Sizin dizi bu şekilde inşa edilmelidir:

$fruits['apples']['blue'] = 24;
$fruits['apples']['read'] = 24;
$fruits['bananas']['blue'] = 12;
$fruits['gooseberries']['orange'] = 4;
$fruits['oranges']['red'] = 12;

Sonra ilerlerken kolaydır. Dizinin ilk seviye satırlar. Yani:

<?php
$column_head = array();
foreach($fruits as $key => $value) {
   $column_head = array_merge($column_head, array_keys($value));
}

$column_head = array_unique($column_head);
print_r($column_head);

?>
<table>
    <tr>
        <th></th>
        <?php foreach($column_head as $head): ?>
            <th><?php echo $head; ?></th>
        <?php endforeach; ?>
    </tr>
    <?php foreach($fruits as $fruit => $amount): ?>
    <tr>
        <td><?php echo $fruit ?></td>
        <?php foreach($column_head as $head): ?>
            <td><?php echo isset($amount[$head]) ? $amount[$head] : 0 ?></td>
        <?php endforeach; ?>
    </tr>
    <?php endforeach; ?>

</table>

Bu sütunlar anında kullanmak için hangi üretir, ama daha kolay olabilir hangi kodlanmış olabilir. Kod kullanır gibi bir sürü bu verimli değil olabilir döngüler ...