За последние 24 часа нас посетили 17478 программистов и 1726 роботов. Сейчас ищут 960 программистов ...

Разбить массив на несколько по ключу

Тема в разделе "Прочие вопросы по PHP", создана пользователем middle123, 18 авг 2015.

  1. middle123

    middle123 Новичок

    С нами с:
    29 июн 2015
    Сообщения:
    8
    Симпатии:
    0
    Приветствую, помогите разобраться, есть массив:

    Код (PHP):
    1. (
    2.     [0] => Array
    3.         (
    4.             [id] => 1
    5.             [title] => 01
    6.             [text] => обивочный материал, призванный создать эффект натуральной замши. Благодаря своим качествам и всевозможным расцветкам микрофибра применяется при производстве качественной мягкой мебели и годится для любого интерьера. С годами на ткани не образуются проплешины.
    7.             [active] => 0
    8.             [casing_folder] => microfibra
    9.             [photo_small] => 1l
    10.             [photo] => 1
    11.             [casing_cat] => 4
    12.         )
    13.  
    14.     [1] => Array
    15.         (
    16.             [id] => 2
    17.             [title] => 03
    18.             [text] => обивочный материал, призванный создать эффект натуральной замши. Благодаря своим качествам и всевозможным расцветкам микрофибра применяется при производстве качественной мягкой мебели и годится для любого интерьера. С годами на ткани не образуются проплешины.
    19.             [active] => 0
    20.             [casing_folder] => microfibra
    21.             [photo_small] => 3l
    22.             [photo] => 3
    23.             [casing_cat] => 4
    24.         )
    25.  
    26.     [2] => Array
    27.         (
    28.             [id] => 3
    29.             [title] => 04
    30.             [text] => обивочный материал, призванный создать эффект натуральной замши. Благодаря своим качествам и всевозможным расцветкам микрофибра применяется при производстве качественной мягкой мебели и годится для любого интерьера. С годами на ткани не образуются проплешины.
    31.             [active] => 0
    32.             [casing_folder] => microfibra
    33.             [photo_small] => 4l
    34.             [photo] => 4
    35.             [casing_cat] => 3
    36.         )
    37.  
    38.     [3] => Array
    39.         (
    40.             [id] => 4
    41.             [title] => 05
    42.             [text] => обивочный материал, призванный создать эффект натуральной замши. Благодаря своим качествам и всевозможным расцветкам микрофибра применяется при производстве качественной мягкой мебели и годится для любого интерьера. С годами на ткани не образуются проплешины.
    43.             [active] => 0
    44.             [casing_folder] => microfibra
    45.             [photo_small] => 5l
    46.             [photo] => 5
    47.             [casing_cat] => 2
    48.         )
    49.  
    50.     [4] => Array
    51.         (
    52.             [id] => 5
    53.             [title] => 06
    54.             [text] => обивочный материал, призванный создать эффект натуральной замши. Благодаря своим качествам и всевозможным расцветкам микрофибра применяется при производстве качественной мягкой мебели и годится для любого интерьера. С годами на ткани не образуются проплешины.
    55.             [active] => 0
    56.             [casing_folder] => microfibra
    57.             [photo_small] => 6l
    58.             [photo] => 6
    59.             [casing_cat] => 1
    60.         )
    61.  
    Получился он вот так :
    Код (PHP):
    1. $res_casing_cat = $mysqli->query("SELECT * FROM casing_cat JOIN casing ON casing_cat.id = casing.casing_cat");
    2.             
    3. if ($res_casing_cat->num_rows > 0) {
    4.                 
    5. for ($i=0; $i<$res_casing_cat->num_rows; $i++) {
    6.       $row_casing_cat[] = $mysqli->assoc($res_casing_cat);
    7. } 
    8.  
    9. $smarty->assign("row_casing_cat", $row_casing_cat);
    10. }
    11.  
    И выводится вот так (smarty):
    Код (PHP):
    1. {foreach $row_casing_cat as $casing_cat}
    2. {$casing_cat.photo_small}
    3. {/foreach}
    4.  
    Мне нужно что-бы значения из БД выводились в разные таблицы по ключу casing_cat. Как можно разбить получившийся из этого кода массив на несколько по ключу casing_cat или может можно сделать это проще (изменить SQL запрос или еще как-то) ?

    P.S. Проблема именно вывести все это дело через smarty, сформировать правильно php код для передачи в шаблон.

    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    Решение А
    1. Использовать в запросе сортировку по полю, по которому хочешь разбивку.
    2. При выводе обнаруживать факт смены значения и в этот момент выводить заголовок или конец таблицы + начало новой таблицы.

    Решение Б
    1. При считывании строк вместо
    $rows[] = …
    сохранять как
    $rows[ $row['category'] ][] = …
    получишь дополнительное измерение в массиве
    2. При выводе использовать двойной цикл: сначала по категориям, затем по записям внутри категории

    Мысль понятна? Только давай без "покажите на примере" ;)
     
  3. middle123

    middle123 Новичок

    С нами с:
    29 июн 2015
    Сообщения:
    8
    Симпатии:
    0
    Двойным циклом пробовал, возникла проблема со смарти, он мне в каждую категорию выводил все записи из таблицы, включая те что в других категориях.

    А как можно обнаружить смену значения в smarty? То есть в tpl файле.
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    наверное надо разобраться с проблемой. или это смарти плохой?
    попробуй сначала на чистом php с echo. как получится, переведешь на язык смарти.

    Добавлено спустя 1 минуту 48 секунд:
    с помощью if, ёмана! старайся лучше.