Вырезать массивы для создания значений таблицы от 0 до 5, затем от 6 до 11 и т. Д. - PullRequest
0 голосов
/ 23 июня 2018

Сложно объяснить, но вот мой запрос: сегодня у меня есть таблица, сгенерированная из 4 массивов в PHP, такая:

@for ($counter_functions = 0; $counter_functions < count($my_array['functions']); $counter_functions++)
	<?php 
		$array_1 = $my_array['functions'][$counter_functions]['statistic']['first_data']['hours'];
		$array_2 = $my_array['functions'][$counter_functions]['statistic']['second_data']['hours'];
		$array_3 = $my_array['functions'][$counter_functions]['statistic']['third_data']['hours'];
		$array_4 = $my_array['functions'][$counter_functions]['statistic']['fourth_data']['hours'];
	?>
	<table>
		<tr>
			<th></th>
			<?php 
				foreach ($array_1 as $key => $value) {
					echo '<th>'.$key.'</th>';
				}
			?>
		</tr>
		<tr>
			<th>Number of connections</th>
			<?php 
				foreach ($array_1 as $key => $value) {
					echo '<th>'.$value.'</th>';
				}
			?>
		</tr>
		<tr>
			<th>Number of successes</th>
			<?php 
				foreach ($array_2 as $key => $value) {
					echo '<th>'.$value.'</th>';
				}
			?>
		</tr>
		<tr>
			<th>Number of errors</th>
			<?php 
				foreach ($array_3 as $key => $value) {
					echo '<th>'.$value.'</th>';
				}
			?>
		</tr>
		<tr>
			<th>Time of response</th>
			<?php 
				// Moyenne des temps de réponse puis arrondir à 4 chiffres
				foreach ($array_4 as $key => $value) {
					echo '<th>'. round(array_sum($value) / count($value), 4) .'</th>';
				}
			?>
		</tr>
	</table>
@endfor

Все работает нормально, но я хочу создать таблицу со значениями $ array_1, $ array_2, $ array_3 и $ array_4 от 0 до 5, затем от 6 до 11и т.д ... вот так:

<table>
  <tr>
    <th>Key 0</th>
    <th>Key 1</th>
    <th>Key 2</th>
    <th>Key 3</th>
    <th>Key 4</th>
    <th>Key 5</th>
  </tr>
  <tr>
    <th>Value 0</th>
    <th>Value 1</th>
    <th>Value 2</th>
    <th>Value 3</th>
    <th>Value 4</th>
    <th>Value 5</th>
  </tr>
  <tr>
    <th>Value 0</th>
    <th>Value 1</th>
    <th>Value 2</th>
    <th>Value 3</th>
    <th>Value 4</th>
    <th>Value 5</th>
  </tr>
  <tr>
    <th>Value 0</th>
    <th>Value 1</th>
    <th>Value 2</th>
    <th>Value 3</th>
    <th>Value 4</th>
    <th>Value 5</th>
  </tr>
  <tr>
    <th>Value 0</th>
    <th>Value 1</th>
    <th>Value 2</th>
    <th>Value 3</th>
    <th>Value 4</th>
    <th>Value 5</th>
  </tr>
</table>

And then 

<table>
  <tr>
    <th>Key 6</th>
    <th>Key 7</th>
    <th>Key 8</th>
    <th>Key 9</th>
    <th>Key 10</th>
    <th>Key 11</th>
  </tr>
  <tr>
    <th>Value 6</th>
    <th>Value 7</th>
    <th>Value 8</th>
    <th>Value 9</th>
    <th>Value 10</th>
    <th>Value 11</th>
  </tr>
  <tr>
    <th>Value 6</th>
    <th>Value 7</th>
    <th>Value 8</th>
    <th>Value 9</th>
    <th>Value 10</th>
    <th>Value 11</th>
  </tr>
  <tr>
    <th>Value 6</th>
    <th>Value 7</th>
    <th>Value 8</th>
    <th>Value 9</th>
    <th>Value 10</th>
    <th>Value 11</th>
  </tr>
  <tr>
    <th>Value 6</th>
    <th>Value 7</th>
    <th>Value 8</th>
    <th>Value 9</th>
    <th>Value 10</th>
    <th>Value 11</th>
  </tr>
</table>

Массив может иметь 5 значений, поскольку он может иметь 28 или 15 значений, в зависимости от того, как у него есть данные.

То, что я пробовал впо крайней мере: я попытался сделать функцию подсчета php из массива, чтобы определить количество его значений. Затем я сделал для нее функцию php ceil

ceil(count($array_1));

Чтобы создать такой цикл с функцией array_slice, чтобыесть array_slice $ array1, 0, 5, затем 6, 11.

Но я действительно запутался, я теряюсь во всем этом коде, есть ли лучший способ, чем то, что я сейчас делаю

Ответы [ 2 ]

0 голосов
/ 23 июня 2018

Самый простой способ - использовать array_chunk, чтобы разделить массив на нужную сумму.

например:

$Chunked = array_chunk($my_array['functions'], 5);

foreach ($Chunked as $Group ) {
    echo '<table>';
    foreach ($Group as $data) {
        echo '<tr>';
        foreach ($data as $k => $v) {
            echo '<th>'.$k.'</th>';
            echo '<td>'.$v.'</td>';
        }
        echo '</tr>';
    }
    echo '</table>';
}

Проверьте документацию для получения дополнительной информации: http://php.net/array_chunk

0 голосов
/ 23 июня 2018

Используя 2 вложенных цикла for, вы легко достигните этого:

// The number of item you want per row
$column_count = 5;

echo '<table>';

// each iteration will build a row
for ($i = 0; $i < count($my_array); $i += $column_count) {
    echo '<tr>';

    // Write the cells
    for ($j = 0; $j < $column_count; $j += 1) {
        // Verify if the calculated index exists
        if (isset($my_array[$i + $j])) {
            echo '<td>' . $my_array[$i + $j]['my_data'] . '</td>';
        } else {
            echo '<td></td>';
        }
    }
    echo '</tr>';
}
echo '</table>';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...