我有两个大小不同的数组,想在同一张表中并排显示它们。
我试图循环运行两个数组,但问题是较短的数组用完了索引。
这是我尝试过的:
$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
答案 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。