PHP Array如何做到这一点,以便所有数组都具有相同的长度

时间:2018-11-13 09:23:59

标签: php arrays

我有一个多维数组。阵列将具有不同的长度,并且很少具有相同的长度。我在这里的问题是如何使阵列全部共享最大尺寸的阵列的长度?

我的阵列:

Array
(
    [1] => Array
        (
            [Session 2] => Beer
            [Food] => Chicken
            [Drink] => Beer
        )

    [2] => Array
        (
            [Session 2] => Tea
            [Food] => Aaaa
            [Drink] => Ddd
            [Cake] => Weee
            [Brownies] => Rrrr
        )

)

预期输出:

Array
(
    [1] => Array
        (
            [Session 2] => Beer
            [Food] => Chicken
            [Drink] => Beer
            [Cake] => ''
            [Brownies] => ''
        )

    [2] => Array
        (
            [Session 2] => Tea
            [Food] => Aaaa
            [Drink] => Ddd
            [Cake] => Weee
            [Brownies] => Rrrr
        )

)

数组大小不仅仅限于两个数组。甚至有可能吗?

我只想复制数组键,而不要复制值,这里的主要目的是在表中显示数组的内容。

3 个答案:

答案 0 :(得分:6)

这是一个选项,您可以在其中构建所有可能的数组键的数组,然后循环遍历原始数组,并将空字符串设置为尚不存在的键:

// find all possible keys
$keys = [];
foreach ($array as $entry) {
    $keys = array_merge($keys, array_keys($entry));
}

// pad missing keys with an empty string
foreach ($array as &$entry) {
    foreach ($keys as $key) {
        if (!isset($entry[$key])) {
            $entry[$key] = '';
        }
    }
}

答案 1 :(得分:1)

如果主要目的是在表中显示数据,则不需要填写缺少的键。您可以使用isset()empty()函数来确定数组是否具有给定键。因此,您的表代码可能如下所示:

<?php
foreach ($rows as $row) {
    echo "<tr>";
    echo "<td>" . isset($row["Session 2"]) ? $row["Session 2"] : "" . "</td>"; //Old school
    echo "<td>" . $row["Food"] ?? "" . "</td>"; //PHP 7+
    //remaining rows
    echo "</tr>";
}

答案 2 :(得分:0)

假设您要讨论的数组位于变量$array内,

执行此操作以找到最大长度;

$max = 0;

foreach($array as $index => $value){

    if($index == sizeof($array) - 1){
        break;
    }

    if($index && $max > sizeof($array[$index+1])){
        $max = $max;
    }
    if(!$index && sizeof($value) > sizeof($array[$index+1])){
        $max = sizeof($value);
    }else {
        $max = sizeof($array[$index+1]);
    }
}