1

我有一个 PHP shell_exec 命令,它输出以下内容:

Cats
3
Dogs
9
Fish
2

每第二行是一个数字,对应于上一行动物的名称,我想要 HTML 表中的输出,例如:

HTML TABLE
------------
| Cats | 3 |
| Dogs | 9 |
| Fish | 2 |
------------

我想我需要创建一个数组,但我不确定如何将动物名称和编号对齐到同一行。目前我有这个:

<?php
    $array1 = array();
    exec( "Command", $Output );

?>
<html>


<table>
  <tr>
    <th>Animal</th>
    <th>Number</th>
  </tr>
  <tr>
    <td>*</td>
    <td>*</td>
  </tr>
  <tr>
    <td>*</td>
    <td>*</td>
  </tr>
  <tr>
    <td>*</td>
    <td>*</td>
  </tr>

  </tr>
</table>

</body>
</html>

我怎样才能把它放到 HTML 表中?

4

2 回答 2

1

使用转换为数组后,您可以使用数组块explode将其转换为数组。

$str = 'Cats
3
Dogs
9
Fish
2';

$arr = explode(PHP_EOL, $str); //break each line
$arr = array_chunk($arr,2); // group each pair
foreach($arr as $e)
    $res[$e[0]] = $e[1]; // group each pair as key and value
print_r($res);

这将输出:

Array
(
    [Cats] => 3
    [Dogs] => 9
    [Fish] => 2
)

您现在可以通过循环更轻松地使用它来显示foreach($res as $animal => $number)

您的 HTML 应该是:

<table>
  <tr>
    <th>Animal</th>
    <th>Number</th>
  </tr>
<?php foreach($res as $animal => $number)
    echo '<tr><td>'. $animal . '</td><td>' . $number . '</td></tr>'; ?>
</table>
于 2019-02-17T15:16:48.940 回答
0

您可以使用 preg_split() 函数将字符串沿换行符拆分为一个数组,并一次循环两个数组,在每个循环中将前两个移开。

<table>
<?php
$Output = <<< EOF
Cats
3
Dogs
9
Fish
2
EOF;

$animals = preg_split('/[\n\r]+/', trim($Output));

while (!empty($animals)) {
    echo "<tr>\n";
    echo "<td>{$animals[0]}</td>\n";
    echo "<td>{$animals[1]}</td>\n";
    echo "</tr>\n";
    array_shift($animals);
    array_shift($animals);
}
?>
</table>

于 2019-02-17T15:24:01.597 回答