在 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);