Измените PHP массив в массив массивов

0

У меня есть массив, который выглядит так

(
 0 => array( id     => '1',
             title  => 'some title',
             type   => 'fiction'
           )
 1 => array( id    => '2',
             title  => 'some title',
             type   => 'fiction'
           )
 2 => array( id     => '3',
             title  => 'some title',
             type   => 'Romance'
           )
)

Я пытаюсь реструктурировать его, чтобы больше походить на следующее

(
 'fiction' => array( 0 => array( id     => '1',
                                 title  => 'some title',
                               )
                     1 => array( id     => '2',
                                 title  => 'some title'
                               ), 
 'Romance' => array( 0 => array( id     => '2',
                                 title  => 'some title'
                               )
)

Я пробовал разные функции, но не могу заставить его работать. Любая помощь будет принята с благодарностью. Спасибо.

Теги:
arrays

3 ответа

1
Лучший ответ
$a1 = array(
 0 => array( 'id'     => '1',
             'title'  => 'some title',
             'type'   => 'fiction'
           ),
 1 => array( 'id'    => '2',
             'title'  => 'some title',
             'type'   => 'fiction'
           ),
 2 => array( 'id'     => '3',
             'title'  => 'some title',
             'type'   => 'Romance'
           )
);
$a2 = array();
foreach($a1 as $item)
{

    $a2[$item['type']][] = array('id'=> $item['id'], 'title'=> $item['title']);
}
  • 0
    Это решение работает просто отлично. Элементы из исходного массива идеально сгруппированы по типу. Привет друг
0

То, что я делал в прошлом, - это цикл и создание нового массива с использованием нужного значения в качестве нового ключа:

$newList = array();
foreach ($yourArray as $book) {
  $newList[$book['title']][] = $book;
  // Optionally unset 'title' from $book if it matters.
}

Возможно, более элегантный способ...

0

позволяет предположить, что первый массив равен $ array1, а второй - $ array2, затем попробуйте следующее:

 $array1 = array(
 0 => array(  'id'     => '1',
                    'title'  => 'some title',
                    'type'   => 'fiction'
            ),
 1 => array( 'id'    => '2',
             'title'  => 'some title',
             'type'   => 'fiction'
           ),
 2 => array( 'id'     => '3',
             'title'  => 'some title',
             'type'   => 'Romance'
           )
);
$array2 = array();
foreach($array1 as $each)
    $array2[$each['type']][] = array_slice($each,0,2);

print_r($array1);
print_r($array2);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню