我有一个这样的数组:
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
)
);
我想创建一个这样的表:
|---------------------|------------------|
| Title 1 | Title 2 |
|---------------------|------------------|
| Value 1 | Value 2 |
|---------------------|------------------|
| Title 3 | Title 4 |
|---------------------|------------------|
| Value 3 | Value 4 |
|---------------------|------------------|
我找到了一些foreach函数,但是这些都给了我标题旁边的值。任何方法可以实现上述功能吗?
答案 0 :(得分:2)
使用modulo operator,它计算两个数字除法的余数。 模运算 通常用作需要重复迭代步骤大于1的进程的解决方案,并且需要分块大数据包。示例:当您想要一次发送100封电子邮件时,然后循环浏览它们并以最大包的形式发送它们。每次迭代步骤10次。
在您的情况下应用的原则是:遍历源数组并从第一个数组键开始每隔一个迭代步骤输出一个结果(两个表行)。
<?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>
<?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);
答案 1 :(得分:0)
如果您的数组是$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
将是一个数组,其中包含每行所需的信息。