0

我有一个数组:$types:

Array
(
    [0] => Array
        (
            [id] => 1
            [cat] => Main
            [type] => name0        )

    [1] => Array
        (
            [id] => 2
            [cat] => Main
            [type] => Name1        )

    [2] => Array
        (
            [id] => 3
            [cat] => Main
            [type] => Name2        )

    [3] => Array
        (
            [id] => 4
            [cat] => Main
            [type] => Name3        )

    [4] => Array
        (
            [id] => 5
            [cat] => Secondary
            [type] => Name4        )

    [5] => Array
        (
            [id] => 6
            [cat] => Secondary
            [type] => Name5        )

    [6] => Array
        (
            [id] => 7
            [cat] => Secondary
            [type] => Name6        )

    [7] => Array
        (
            [id] => 8
            [cat] => Other
            [type] => Name7
        )

    [8] => Array
        (
            [id] => 9
            [cat] => Other
            [type] => Name8
        )

    [9] => Array
        (
            [id] => 10
            [cat] => Other
            [type] => Name9
        )

    [10] => Array
        (
            [id] => 11
            [cat] => Other
            [type] => name10
        )

)

我想将它重新构建为一个多向阵列。但是按 cat 分组在一起,因此它们是 Main、Secondary 和 Other *那些确实或可能从数据库中更改的。随着时间的推移会增加更多,因此$types['cat']建议使用。

我还有一个。有 cat1/cat2 我需要做同样的事情,但在我得到这个工作之后,我希望我能把那个工作出来。

我在这里看过,在谷歌上看过。这里有一些类似的例子,但我无法让它们中的任何一个正常工作。据我所知,我认为最好的方法是使用foreach()然后构建一个新数组?

4

1 回答 1

0

像这样的东西?

<?
$all = array(
    array('id'=>1, 'cat'=>'Main','type'=>'Name0'),
    array('id'=>2, 'cat'=>'Main','type'=>'Name1'),
    array('id'=>3, 'cat'=>'Main','type'=>'Name3'),
    array('id'=>4, 'cat'=>'Sec','type'=>'Name4'),
    array('id'=>5, 'cat'=>'Sec','type'=>'Name5'),
    array('id'=>6, 'cat'=>'Sec','type'=>'Name6'),
);

$result = array();
foreach($all as $array){
    $result[$array['cat']][] = array('id'=>$array['id'],'type'=>$array['type']);
}

die(print_r($result));
于 2012-09-09T19:18:45.070 回答