Разбейте строку 2 раза и положите в стол

Хорошо, у меня есть строка, которая должна быть разделена на 2 раза. Первый раз через пробелы и второй раз через запятую. Так что я могу положить это в таблицу.

Мне удалось разделить строку по пробелам и поместить ее в первый столбец таблицы, но я пытаюсь разделить ее во второй раз и поместить значения в правильный столбец.

Вот фрагменты того, что я уже получил:

<?php for ($i = 0; $i < sizeof($volumes); $i++) {
    echo "<tr><td>" . $volumes[$i] . "</td></tr>";
} ?>

3 ответа

Решение

Когда вы визуализируете строки таблицы, вы должны разделить каждый том запятой. Я не совсем понимаю все извлеченные строки или логику вашего кода, но этот набор кода должен делать то, что вам нужно:

<?php 
    for ($i = 0; $i < sizeof($volumes); $i++) {
        echo '<tr>';
        $volumeData = explode(',', $volumes[$i]);
        foreach ($volumeData as $volume) {
            echo '<td>' . $volume . '</td>';
        }
        echo '</tr>';
    }
?>

Вы уверены, что указанная вами строка верна? Я думаю, что между размером SystemReserved и меткой следующего диска отсутствует кома. Если это так - код должен выглядеть примерно так: сначала мы "взрываем" строку, чтобы создать массив, а затем используем массив, чтобы разделить его на массивы по семь записей в каждом. И затем сделать это:

$string = 'L,Logs,NTFS,Healthy,OK,9.73,9.77 ,SystemReserved,NTFS,Healthy,OK,0.16,0.49 ,C,LocalDisk,NTFS,Healthy,OK,18.19,29.74';
$array = explode(',', $string);
$results = array_chunk($array, 7, true);

?>

<table id="tbl_basic_volumes">
    <tr>
        <th>Buchstabe:</th>
        <th>Name:</th>
        <th>Filesystem:</th>
        <th>Health Status:</th>
        <th>Operational Status:</th>
        <th>Freier Speicherplatz:</th>
        <th>Gesamter Speicherplatz:</th>
    </tr>
    <?php
        foreach ($results as $result) {
            echo '<tr>';
            foreach ($result as $entry) {
                echo '<td>'.$entry.'</td>';
            }
            echo '</tr>';
        }
    ?>
</table>

Вы можете избежать внутреннего цикла foreach, используя implode,

$str = "L,Logs,NTFS,Healthy,OK,9.73,9.77 ,SystemReserved,NTFS,Healthy,OK,0.16,0.49 C,LocalDisk,NTFS,Healthy,OK,18.19,29.74";
$rows = explode(' ', $str);
foreach ($rows as $row) {
  echo '<tr><td>' . implode('</td><td>', explode(',', $row)) . '</td></tr>';
}

Или даже заменить запятые на </td><td> также будет работать:

$str = "L,Logs,NTFS,Healthy,OK,9.73,9.77 ,SystemReserved,NTFS,Healthy,OK,0.16,0.49 C,LocalDisk,NTFS,Healthy,OK,18.19,29.74";
$rows = explode(' ', $str);
foreach ($rows as $row) {
  echo '<tr><td>' . str_replace(',', '</td><td>', $row) . '</td></tr>';
}
Другие вопросы по тегам