在表中显示两个不同大小的数组

时间:2019-06-27 05:58:32

标签: php arrays for-loop html-table

我有两个大小不同的数组,想在同一张表中并排显示它们。

我试图循环运行两个数组,但问题是较短的数组用完了索引。

这是我尝试过的:

$clean_s = ['apple','ball','cat','dog'];
$clean_r = ['apple','bat','carrot','duck','elephant','fan'];
if(sizeof($clean_s) == sizeof($clean_r)) {
        $max = sizeof($clean_s);
} else {
        $max = sizeof($clean_s) > sizeof($clean_r) ? sizeof($clean_s) : sizeof($clean_r);
}

$table = '<table><thead><tr><th>Source</th><th>Result</th></thead><tbody>';
for($i=0; $i < $max; $i++) {
   $table .= '<tr><td>'.$clean_s[$i].'</td><td>'.$clean_r[$i].'</td></tr>';
}

所需的输出:

Source    |   Result
________________________
apple     |   apple
ball      |   bat
cat       |   carrot
dog       |   duck
          |   elephant
          |   fan

2 个答案:

答案 0 :(得分:4)

您可以在echo之前检查isset(),如下:

$table = '<table><thead><tr><th>Source</th><th>Result</th></thead><tbody>';
for($i=0; $i < $max; $i++) {
   $s = isset($clean_s[$i]) ? $clean_s[$i] : '';
   $r = isset($clean_r[$i]) ? $clean_r[$i] : '';
   $table .= '<tr><td>'.$s.'</td><td>'.$r.'</td></tr>';
}

PHP 7也可以使用$s = $clean_s[$i] ?? '';

的语法

答案 1 :(得分:3)

如果您使用的是PHP 7 +

$max = max(array_map("count", [$clean_s, $clean_r]));
$table = '<table><thead><tr><th>Source</th><th>Result</th></thead><tbody>';
for($i=0; $i < $max; $i++) {
    $table .= "<tr><td>".($clean_s[$i] ?? "")."</td><td>".($clean_r[$i] ?? "")."</td><tr/>";
}

您可以使用Null合并运算符??来实现。

  

注意:对于需要与isset()结合使用三进制的常见情况,已将空合并运算符(??)添加为语法糖。如果存在并且不是 NULL ,则返回其第一个操作数;否则,它将返回其第二个操作数。

编辑
不用编写传统的代码片段来获取更大的数组,

$max = max(array_map("count", [$clean_s, $clean_r]));

这将给出传递的数组数并从中获取最大值。

Demo