我有一个多维数组。阵列将具有不同的长度,并且很少具有相同的长度。我在这里的问题是如何使阵列全部共享最大尺寸的阵列的长度?
我的阵列:
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
)
)
数组大小不仅仅限于两个数组。甚至有可能吗?
我只想复制数组键,而不要复制值,这里的主要目的是在表中显示数组的内容。
答案 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]);
}
}