我有一个带有一些值的多维数组。
[
1 => [
'label' => 'SEO',
'content' => 'Some content',
'group' => 'We can offer'
]
2 => [
'label' => 'Webdesign',
'content' => 'Some content',
'group' => 'We can offer'
]
3 => [
'label' => 'Contact',
'content' => 'Some content',
'group' => 'Who are we?'
]
4 => [
'label' => 'Logodesign',
'content' => 'Some content',
'group' => 'We can offer'
]
5 => [
'label' => 'Address',
'content' => 'Some content',
'group' => 'Who are we?'
]
]
group
元素是各种用户输入。我想将所有group
个元素排序到同一个数组中。然后它会被显示出来。如果只有2个元素具有相同的group
值,则HTML中的.row
元素中只有两列(两者的宽度均为50%),如果有1个元素,则只有一列(100%宽度)。如果有人想知道为什么,我正在尝试构建一个非常简单的CMS。可能有更简单的方法来做到这一点,但我想不出任何。
感谢任何帮助。
编辑:
我认为我的数组排序了。看起来不错。
现在我只需要以正确的方式显示它。
$i = 0;
$count = count($data['sections']);
$content = [];
for ($i = 0; $i < $count; $i++) {
if (!in_array($data['sections'][$i]['group'], $content)) {
$content[] = $data['sections'][$i]['group'];
}
$content[$data['sections'][$i]['group']][] = ['label' => $data['sections'][$i]['label'], 'content' => $data['sections'][$i]['content']];
}
答案 0 :(得分:1)
只需遍历数组并将所有元素放入一个新的嵌套数组中:
$content = array();
foreach($data['sections'] as $section) {
$content[$section['group']][] = $section;
}
这会为您提供此格式的数组$content
:
[
'We can offer' => [
1 => [
'label' => 'SEO',
'content' => 'Some content',
'group' => 'We can offer'
]
2 => [
'label' => 'Webdesign',
'content' => 'Some content',
'group' => 'We can offer'
]
...
]
'Who are we?' => [
...
]
]
那么你如何输出这个以使每个类别的宽度相等?首先,您需要遍历嵌套数组以打印一些HTML:
<div class="outer">
<?php foreach($content as $group) { ?>
<div class="row">
<?php foreach($group as $item) { ?>
<div class="item"><?php echo $item['content']; ?></div>
<?php } ?>
</div>
<?php } ?>
</div>
使用CSS查看此answer的一种方法:
div.outer { display:table; }
div.row { display:table-row; }
div.item { display:table-cell; }
另一种方法是在PHP中计算宽度百分比,并使用width
属性明确设置:
<?php foreach($content as $group) { ?>
<div class="row">
<?php $w = 100 / count($group); ?>
<?php foreach($group as $item) { ?>
<div class="item" width="<?php echo $w; ?>%">
<?php echo $item['content']; ?>
</div>
<?php } ?>
</div>
<?php } ?>