2012-07-12 116 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