2012-07-12 115 views
1

我有一個多維數組:PHP分組陣列由Index

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 2012-07-12 08:50:20

+0

@DaveRandom有一個內置的函數 - array_map()'。 – Ariel 2012-07-12 08:52:16

+0

@Ariel我很確定'array_map()'不是那麼聰明,它一次只能查看一個元素。 – DaveRandom 2012-07-12 08:53:06

回答

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 2012-07-12 09:02:55

+0

完美的作品! – zourbuth 2012-07-12 09:08:02

+0

謝謝@diEcho! – Florent 2012-07-12 09:16:24

2

array_map() null爲回調將完全按照您的要求。然而,它會有索引號碼而不是名稱。

如果你編寫自己的回調函數,那麼你可以用你需要的名字返回一個數組。

因爲顯然人們希望的實際代碼:

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

這真的是這麼簡單。大多數其他答案是如此之大而且沒有必要。

注意:這假設有固定數量的數組 - 如果它不是固定的,那麼這將不起作用,然後與Florent的答案一起。

+0

這是如何幫助?(順便說一下,我沒有downvote你) – diEcho 2012-07-12 08:48:49

+0

@diEcho我還在編輯它。這正是他的問題的答案,所以downvote是沒有根據的。 – Ariel 2012-07-12 08:49:59

+0

我看不到'array_map'在這裏如何變得方便。也許可以優化你的答案,並舉例說明在這個特定情況下如何調用'array_map'。 – 2012-07-12 09:08:22

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

該函數產生「未定義偏移量」併爲空值創建索引。公式:它爲投資組合類型生成「標題」和「內容」索引。 – zourbuth 2012-07-12 08:59:47

+0

數組必須具有相同的長度。更新了awnser。不明白爲什麼它會變得downvoted,因爲該函數工作:/。但是Florent的答案是更好的解決方案。 – 2012-07-12 09:04:13

+0

函數爲每個類型創建不可用的索引和值。 – zourbuth 2012-07-12 09:09:18