2012-07-12 5 views
1

У меня есть многомерный массив:PHP Группировка массива по индексу

Array 
(
[type] => Array 
(
    [0] => text 
    [1] => portfolio 
    [2] => slide 
    [3] => text 
) 

[grid] => Array 
(
    [0] => 3 
    [1] => 5 
    [2] => 3 
    [3] => 4 
) 

[title] => Array 
(
    [0] => title1 
    [3] => title2 
) 

[content] => Array 
(
    [0] => content1 
    [3] => content2 
) 

[item] => Array 
(
    [1] => 6 
    [2] => 7 
) 

[pagination] => Array 
(
    [1] => 8 
) 

[order] => Array 
(
    [1] => desc 
    [2] => asc 
) 

) 

И хочу сгруппировать его с помощью клавиши [типа] приведено в массиве:

Array (

[0] => Array (
     [type] => text 
     [grid] => 3 
     [title] => title1 
     [content] => content1 
    ) 

[1] => Array (
     [type] => portfolio 
     [grid] => 5 
     [item] => 6 
     [pagination] => 1 
     [order] => desc 
    ) 

[2] => Array (
     [type] => slide 
     [grid] => 3 
     [item] => 7 
     [order] => asc 
    ) 

[3] => Array (
     [type] => text 
     [grid] => 4 
     [title] => title2 
     [content] => content2 
    ) 

Есть ли способ или PHP функция делать массивные группировки?

+1

Там нет встроенной функции, но она может быть легко достигнуто с зацикливание. [Что вы пробовали?] (Http://whathaveyoutried.com/) – DaveRandom

+0

@DaveRandom Существует встроенная функция - 'array_map()'. – Ariel

+0

@Ariel Я довольно уверен, что 'array_map()' не так уж и интеллигентен, он смотрит только на один элемент за раз. – DaveRandom

ответ

6

Этот фрагмент кода обеспечивает, что:

$result = array(); 
foreach ($array as $key => $data) { 
    foreach ($data as $offset => $value) { 
     if (isset($result[$offset])) { 
      $result[$offset][$key] = $value; 
     } else { 
      $result[$offset] = array($key => $value); 
     } 
    } 
} 

Working DEMO

+0

+1 для идеального решения. Я добавил DEMO – diEcho

+0

Работает отлично! – zourbuth

+0

Спасибо @diEcho! – Florent

2

array_map() с нулевым значением для обратного вызова будет делать именно то, что вы хотите. Однако он будет иметь номер для индекса вместо имен.

Если вы напишете свой собственный обратный вызов, вы можете вернуть массив с нужными именами.

Поскольку, по-видимому люди хотят фактический код:

array_map(null, $type_array, $grid_array, $title_array, $content_array, $item_array); 

Это действительно так просто. Большинство других ответов являются настолько большими и ненужными.

Примечание. Это предполагает фиксированное количество массивов - если оно не фиксировано, это не сработает, а затем повторите ответ Флорента.

+0

как это помогает? (BTW, я не сбил вас) – diEcho

+0

@diEcho Я все еще редактировал его. И это точно ответ на его вопрос, поэтому нисходящий союз необоснован. – Ariel

+0

Я не вижу, как «array_map» может пригодиться здесь. Возможно, уточните свой ответ и дайте пример, как вызвать 'array_map' в этом конкретном случае. –

0

Вы можете сделать это с помощью этой функции:

$type_array = array('text', 'portfolio', 'slide', 'text'); 
$grid_array = array(3, 5, 3, 4); 
$title_array = array(0 => 'title1', 3 => 'title2'); 
$content_array = array(0 => 'content1', 3 => 'content2'); 
$item_array = array(1 => 6, 2 => 7); 


function group_arrays($type_array, $grid_array, $title_array, $content_array, $item_array) { 
    $temp_array = array(); 

    for($i = 0; $i < count($type_array); $i++) { 
     $temp_array[$i] = array('type' => @$type_array[$i], 
           'grid' => @$grid_array[$i], 
           'title' => @$title_array[$i], 
           'content' => @$content_array[$i], 
           'item' => @$item_array[$i]); 
    } 

    return $temp_array; 
} 

print_r(group_arrays($type_array, $grid_array, $title_array, $content_array, $item_array)); 

Надеется, что это помогает!

+0

Функция создает «Undefined offset» и создает индекс для пустого значения. Eq: он создает индекс «title» и «content» для типа портфеля. – zourbuth

+0

Массивы должны иметь одинаковую длину. Обновлен тент. Не понимаю, почему это происходит, потому что функция работает: /. Но ответ Florent - лучшее решение. –

+0

Функция создает недоступный индекс и значение для каждого типа. – zourbuth

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