在表中显示有2列的数组

时间:2017-07-04 16:19:33

标签: php html arrays foreach tabular

我有一个这样的数组:

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函数,但是这些都给了我标题旁边的值。任何方法可以实现上述功能吗?

2 个答案:

答案 0 :(得分:2)

使用modulo operator,它计算两个数字除法的余数。 模运算 通常用作需要重复迭代步骤大于1的进程的解决方案,并且需要分块大数据包。示例:当您想要一次发送100封电子邮件时,然后循环浏览它们并以最大包的形式发送它们。每次迭代步骤10次。

在您的情况下应用的原则是:遍历源数组并从第一个数组键开始每隔一个迭代步骤输出一个结果(两个表行)。

版本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);

答案 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将是一个数组,其中包含每行所需的信息。