PHP从数组中获取所有相似的值

时间:2015-07-14 10:12:51

标签: php html arrays

我有一个带有一些值的多维数组。

[

    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']];
    }

1 个答案:

答案 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 } ?>