отображать два разных размера массива в таблице - PullRequest
2 голосов
/ 27 июня 2019

У меня есть два массива разных размеров, и я хочу отобразить их рядом в одной таблице.

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

Вот что я попробовал:

$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 ]

4 голосов
/ 27 июня 2019

Вы можете проверить isset () перед echo как:

$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] ?? '';

3 голосов
/ 27 июня 2019

Если вы используете 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/>";
}

Вы можете использовать оператор объединения нулей ?? для того же оператора.

Примечание : Нулевой оператор слияния (??) был добавлен в качестве синтаксического сахара для общего случая необходимости использования троичного в сочетании с isset().Он возвращает свой первый операнд, если он существует и не является NULL ;в противном случае возвращается второй операнд.

РЕДАКТИРОВАТЬ :
Вместо написания традиционного фрагмента для получения большего массива,

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

Thisвыдаст количество пройденных массивов и получит из него максимальное значение.

Демо .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...