0

これは私の配列です。

Array
(
    [id] => 1
    [color] => "White"
    [something] => Array
    (
        [country] => "France"
        [city] => "Paris"
    )

)
Array
(
    [id] => 2
    [color] => "Black"
    [something] => Array
    (
        [country] => "Germany"
        [city] => "Berlin"
    )

)
Array
(
    [id] => 2
    [color] => "Red"
    [something] => Array
    (
        [country] => "Russia"
        [city] => "Moscow"
    )

)

id配列を同じ値でグループ化したい。これは出力になるはずです:

[0] => Array
(
    [0] => Array
    (
        [id] => 1
        [color] => "White"
        [something] => Array
        (
                [country] => "France"
                [city] => "Paris"
        )

    )

)
[1] => Array
(

    [0] => Array
    (
        [id] => 2
        [color] => "Black"
        [something] => Array
        (
            [country] => "Germany"
            [city] => "Berlin"
        )

    )
    [1] => Array
    (

        [id] => 2
        [color] => "Red"
        [something] => Array
        (
            [country] => "Russia"
            [city] => "Moscow"
        )

    )

)

数十のforeachステートメントを試しましたが、同じ配列内で同じ配列を取得する方法はありませんid。おそらく多次元配列であるという事実と関係がありますか?結果を得るためにネストされた 2 を使用する必要がforeachありますか?

4

3 に答える 3

1

コード:

<?php

$arr = array(
    array(
        'id'    => 1,
        'color' => 'white',
        'something' => array(
            'country' => 'France',
            'city'    => 'Paris',
        ),
    ),
    array(
        'id'    => 2,
        'color' => 'Black',
        'something' => array(
            'country' => 'Germany',
            'city'    => 'Berlin',
        ),
    ),
    array(
        'id'    => 2,
        'color' => 'Red',
        'something' => array(
            'country' => 'Russia',
            'city'    => 'Moscow',
        ),
    ),
);


function groupify($arr) {
    $new = array();
    foreach ($arr as $item) {
        if (!isset($new[$item['id']])) {
            $new[$item['id']] = array();
        }
        $new[$item['id']][] = $item;
    }
    return $new;
}

print_r(groupify($arr));

結果:

Array
(
    [1] => Array
        (
            [0] => Array
                (
                    [id] => 1
                    [color] => white
                    [something] => Array
                        (
                            [country] => France
                            [city] => Paris
                        )

                )

        )

    [2] => Array
        (
            [0] => Array
                (
                    [id] => 2
                    [color] => Black
                    [something] => Array
                        (
                            [country] => Germany
                            [city] => Berlin
                        )

                )

            [1] => Array
                (
                    [id] => 2
                    [color] => Red
                    [something] => Array
                        (
                            [country] => Russia
                            [city] => Moscow
                        )

                )

        )

)

キーを保存したくない場合は、array_valuesbeforeを呼び出してreturnください。

于 2013-05-14T16:05:55.277 に答える
0

foreach を使用する場合:

<?php
$return = array();
foreach($array as $key => $innerArray) {
    $return[$innerArray['id']][]= $innerArray;
}

$return には、ID で検索されたものが含まれています。ここで、キー 1 と 2 はあなたの ID です。

array(
    1 => array(
        array(/** **/) 
    ),
    2 => array(
        array(/** **/),
        array(/** **/) 
    );
);

その後、次のようにグループにアクセスできます。

foreach($return as $key => $groupArray) {
    // you have the groups here

    foreach($groupArray as $id => $singleArray) {
       // singleArray contains your id, colour etc
    }
}

foreach($return[1] as $groupOne) {
    // all arrays with id = 1
}
于 2013-05-14T15:27:09.253 に答える