在 table 中显示包含 2 列的数组
Display array in table with 2 columns
我有一个这样的数组:
Array
(
[0] => Array
(
[Title] => Title 1,
[Value] => Value 1
),
[1] => Array
(
[Title] => Title 2,
[Value] => Value 2
),
[2] => Array
(
[Title] => Title 3,
[Value] => Value 3
),
[3] => Array
(
[Title] => Title 4,
[Value] => Value 4
)
);
我想创建一个这样的 table:
|---------------------|------------------|
| Title 1 | Title 2 |
|---------------------|------------------|
| Value 1 | Value 2 |
|---------------------|------------------|
| Title 3 | Title 4 |
|---------------------|------------------|
| Value 3 | Value 4 |
|---------------------|------------------|
我找到了一些 foreach 函数,但这些函数都给我标题和旁边的值。有什么方法可以完成上述操作吗?
如果你的数组是$array
,你可以这样使用foreach
:
echo '<table>';
foreach ($array as $row)
{
echo "<tr>";
echo "<td>" . $row['Title'] . "</td>";
echo "<td>" . $row['Value'] . "</td>";
echo "</tr>";
}
echo '</table>';
foreach
基本上循环遍历 $array
中的每个元素并将其分配给 $row
。由于数组的元素是其他数组,$row
将是一个包含每一行所需信息的数组。
利用modulo operator计算两个数相除的余数。 模运算 通常用作需要重复且迭代步长大于 1 的过程的解决方案,并且在需要分块大数据包的情况下。示例:当您想一次发送 100 封电子邮件时,您可以循环遍历它们并将它们以最大包的形式发送。每个迭代步骤 10 个。
在您的案例中应用的原则是:循环遍历源数组并从第一个数组键开始,每第二个迭代步骤输出一个结果(两 table 行)。
版本 1 - 直接输出 HTML:
<?php
/*
* Original array.
*/
$source = [
0 => [
'Title' => 'Title 1',
'Value' => 'Value 1'
],
1 => [
'Title' => 'Title 2',
'Value' => 'Value 2'
],
2 => [
'Title' => 'Title 3',
'Value' => 'Value 3'
],
3 => [
'Title' => 'Title 4',
'Value' => 'Value 4'
],
4 => [
'Title' => 'Title 5',
'Value' => 'Value 5'
],
];
echo 'ORIGINAL:<pre>' . print_r($source, true) . '</pre>';
/*
* Filter array for empty/null values.
* The result is another array.
*/
$source = array_filter($source, function($el) {
return !(
empty($el['Title']) ||
!isset($el['Title']) ||
empty($el['Value']) ||
!isset($el['Value'])
);
});
echo 'FILTERED:<pre>' . print_r($source, true) . '</pre>';
/*
* Reset array keys by applying array_values().
* The result is another array.
*/
$source = array_values($source);
echo 'ARRAY_VALUES:<pre>' . print_r($source, true) . '</pre>';
?>
<table>
<?php
foreach ($source as $key => $item) {
if ($key % 2 == 0) {
?>
<tr>
<td>
<?php
if (isset($source[$key]['Title'])) {
echo $source[$key]['Title'];
}
?>
</td>
<td>
<?php
if (isset($source[$key + 1]['Title'])) {
echo $source[$key + 1]['Title'];
}
?>
</td>
</tr>
<tr>
<td>
<?php
if (isset($source[$key]['Value'])) {
echo $source[$key]['Value'];
}
?>
</td>
<td>
<?php
if (isset($source[$key + 1]['Value'])) {
echo $source[$key + 1]['Value'];
}
?>
</td>
</tr>
<?php
}
}
?>
</table>
版本 2 - 来自 PHP 的输出:
<?php
/*
* Original array.
*/
$source = [
0 => [
'Title' => 'Title 1',
'Value' => 'Value 1'
],
1 => [
'Title' => 'Title 2',
'Value' => 'Value 2'
],
2 => [
'Title' => 'Title 3',
'Value' => 'Value 3'
],
3 => [
'Title' => 'Title 4',
'Value' => 'Value 4'
],
4 => [
'Title' => 'Title 5',
'Value' => 'Value 5'
],
];
echo 'ORIGINAL:<pre>' . print_r($source, true) . '</pre>';
/*
* Filter array for empty/null values.
* The result is another array.
*/
$source = array_filter($source, function($el) {
return !(
empty($el['Title']) ||
!isset($el['Title']) ||
empty($el['Value']) ||
!isset($el['Value'])
);
});
echo 'FILTERED:<pre>' . print_r($source, true) . '</pre>';
/*
* Reset array keys by applying array_values().
* The result is another array.
*/
$source = array_values($source);
echo 'ARRAY_VALUES:<pre>' . print_r($source, true) . '</pre>';
$tableRows = '';
foreach ($source as $key => $item) {
if ($key % 2 == 0) {
$tableRows .= sprintf('
<tr>
<td>
%s
</td>
<td>
%s
</td>
</tr>
<tr>
<td>
%s
</td>
<td>
%s
</td>
</tr>
'
, isset($source[$key]['Title']) ? $source[$key]['Title'] : ''
, isset($source[$key + 1]['Title']) ? $source[$key + 1]['Title'] : ''
, isset($source[$key]['Value']) ? $source[$key]['Value'] : ''
, isset($source[$key + 1]['Value']) ? $source[$key + 1]['Value'] : ''
);
}
}
echo sprintf('<table>%s</table>', $tableRows);
我有一个这样的数组:
Array
(
[0] => Array
(
[Title] => Title 1,
[Value] => Value 1
),
[1] => Array
(
[Title] => Title 2,
[Value] => Value 2
),
[2] => Array
(
[Title] => Title 3,
[Value] => Value 3
),
[3] => Array
(
[Title] => Title 4,
[Value] => Value 4
)
);
我想创建一个这样的 table:
|---------------------|------------------|
| Title 1 | Title 2 |
|---------------------|------------------|
| Value 1 | Value 2 |
|---------------------|------------------|
| Title 3 | Title 4 |
|---------------------|------------------|
| Value 3 | Value 4 |
|---------------------|------------------|
我找到了一些 foreach 函数,但这些函数都给我标题和旁边的值。有什么方法可以完成上述操作吗?
如果你的数组是$array
,你可以这样使用foreach
:
echo '<table>';
foreach ($array as $row)
{
echo "<tr>";
echo "<td>" . $row['Title'] . "</td>";
echo "<td>" . $row['Value'] . "</td>";
echo "</tr>";
}
echo '</table>';
foreach
基本上循环遍历 $array
中的每个元素并将其分配给 $row
。由于数组的元素是其他数组,$row
将是一个包含每一行所需信息的数组。
利用modulo operator计算两个数相除的余数。 模运算 通常用作需要重复且迭代步长大于 1 的过程的解决方案,并且在需要分块大数据包的情况下。示例:当您想一次发送 100 封电子邮件时,您可以循环遍历它们并将它们以最大包的形式发送。每个迭代步骤 10 个。
在您的案例中应用的原则是:循环遍历源数组并从第一个数组键开始,每第二个迭代步骤输出一个结果(两 table 行)。
版本 1 - 直接输出 HTML:
<?php
/*
* Original array.
*/
$source = [
0 => [
'Title' => 'Title 1',
'Value' => 'Value 1'
],
1 => [
'Title' => 'Title 2',
'Value' => 'Value 2'
],
2 => [
'Title' => 'Title 3',
'Value' => 'Value 3'
],
3 => [
'Title' => 'Title 4',
'Value' => 'Value 4'
],
4 => [
'Title' => 'Title 5',
'Value' => 'Value 5'
],
];
echo 'ORIGINAL:<pre>' . print_r($source, true) . '</pre>';
/*
* Filter array for empty/null values.
* The result is another array.
*/
$source = array_filter($source, function($el) {
return !(
empty($el['Title']) ||
!isset($el['Title']) ||
empty($el['Value']) ||
!isset($el['Value'])
);
});
echo 'FILTERED:<pre>' . print_r($source, true) . '</pre>';
/*
* Reset array keys by applying array_values().
* The result is another array.
*/
$source = array_values($source);
echo 'ARRAY_VALUES:<pre>' . print_r($source, true) . '</pre>';
?>
<table>
<?php
foreach ($source as $key => $item) {
if ($key % 2 == 0) {
?>
<tr>
<td>
<?php
if (isset($source[$key]['Title'])) {
echo $source[$key]['Title'];
}
?>
</td>
<td>
<?php
if (isset($source[$key + 1]['Title'])) {
echo $source[$key + 1]['Title'];
}
?>
</td>
</tr>
<tr>
<td>
<?php
if (isset($source[$key]['Value'])) {
echo $source[$key]['Value'];
}
?>
</td>
<td>
<?php
if (isset($source[$key + 1]['Value'])) {
echo $source[$key + 1]['Value'];
}
?>
</td>
</tr>
<?php
}
}
?>
</table>
版本 2 - 来自 PHP 的输出:
<?php
/*
* Original array.
*/
$source = [
0 => [
'Title' => 'Title 1',
'Value' => 'Value 1'
],
1 => [
'Title' => 'Title 2',
'Value' => 'Value 2'
],
2 => [
'Title' => 'Title 3',
'Value' => 'Value 3'
],
3 => [
'Title' => 'Title 4',
'Value' => 'Value 4'
],
4 => [
'Title' => 'Title 5',
'Value' => 'Value 5'
],
];
echo 'ORIGINAL:<pre>' . print_r($source, true) . '</pre>';
/*
* Filter array for empty/null values.
* The result is another array.
*/
$source = array_filter($source, function($el) {
return !(
empty($el['Title']) ||
!isset($el['Title']) ||
empty($el['Value']) ||
!isset($el['Value'])
);
});
echo 'FILTERED:<pre>' . print_r($source, true) . '</pre>';
/*
* Reset array keys by applying array_values().
* The result is another array.
*/
$source = array_values($source);
echo 'ARRAY_VALUES:<pre>' . print_r($source, true) . '</pre>';
$tableRows = '';
foreach ($source as $key => $item) {
if ($key % 2 == 0) {
$tableRows .= sprintf('
<tr>
<td>
%s
</td>
<td>
%s
</td>
</tr>
<tr>
<td>
%s
</td>
<td>
%s
</td>
</tr>
'
, isset($source[$key]['Title']) ? $source[$key]['Title'] : ''
, isset($source[$key + 1]['Title']) ? $source[$key + 1]['Title'] : ''
, isset($source[$key]['Value']) ? $source[$key]['Value'] : ''
, isset($source[$key + 1]['Value']) ? $source[$key + 1]['Value'] : ''
);
}
}
echo sprintf('<table>%s</table>', $tableRows);