【问题标题】:display two different sizes array in table在表格中显示两个不同大小的数组
【发布时间】:2019-11-09 02:32:56
【问题描述】:

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

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

这是我尝试过的:

$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

【问题讨论】:

    标签: php arrays for-loop html-table


    【解决方案1】:

    您可以在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] ?? '';的语法

    【讨论】:

      【解决方案2】:

      如果你使用的是 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,则返回其第一个操作数;否则,它返回第二个操作数。

      编辑
      而不是写一个传统的sn-p来得到一个更大的数组,

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

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

      Demo.

      【讨论】:

      • 感谢您提供的关于获得最大值的额外解决方案。
      猜你喜欢
      • 2016-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-21
      相关资源
      最近更新 更多