2015-07-14 4 views
1

У меня есть многомерный массив с некоторыми значениями.PHP Получить все одинаковые значения из массива

[ 

    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, то в элементе .row в HTML будет только два столбца (ширина 50%), если есть один элемент, только один столбец (100% ширина). Я пытаюсь создать очень простой CMS, если кто-то задается вопросом, почему. Могут быть более простые способы сделать это, но я не могу придумать.

Любая помощь приветствуется.

EDIT:

Я только что получил массив отсортирован я думаю. Это выглядит правильно.

Теперь мне просто нужно отобразить его в правильном направлении.

$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

И если есть более двух элементов? Вы хотите равную ширину для всех элементов, так что если есть n элементов, они получают 1/n: th пробела? – Anders

+0

Да, точно. Пример элемента контента получит класс '.c - # - 12' – Kaizokupuffball

+0

. Тогда вы можете посмотреть этот вопрос: http://stackoverflow.com/questions/6629951/divide-width-of-element-between -child-divs-with-css – Anders

ответ

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> 

взглянуть на этой answer один из способов сделать это с помощью CSS:

div.outer { display:table; } 
div.row { display:table-row; } 
div.item { display:table-cell; } 

Divide ширина: Явная ширина

Другой способ сделать это состоит в вычислении ширины в процентах в 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 } ?> 
+0

Это имело гораздо больше смысла, чем цикл for. Теперь я понимаю это намного лучше. У меня есть своя небольшая система сетки, поэтому я буду добавлять классы (если 3 колла, c-4-12). И т. Д. Это очень помогло мне. Спасибо! – Kaizokupuffball

Смежные вопросы