-1

私は配列を持っています:

Array
(
    [users] => Array
        (
            [101] => Array
                (
                    [odata] => Array
                        (
                            [0] => 2
                            [1] => 1
                            [2] => 1
                            [3] => 1
                        )

                )

            [200] => Array
                (
                    [odata] => Array
                        (
                            [0] => 2
                            [1] => 1
                            [2] => 1
                            [3] => 0
                        )

                )

        )

    [rjad] => Array
        (
            [2] => Array
                (
                    [0] => red
                    [1] => blue
                    [2] => green
                )

        )

)

この配列では、[rjad] key = [odata] key、および[odata] value=[rjad]の2番目のキーです。

私が欲しいのは、2番目の配列にユーザーIDの値を持つ古い配列から新しい配列を作成することです:

このような:

[rjad] => Array
            (
                [2] => Array
                    (
                        [0] => red
                        [1] => Array
                                   (
                                     [blue] => Array
                                               (
                                                 [0] => 101
                                                 [1] => 200
                                                )
                        [2] => green
                    )

            )

すでに3時間苦労して成功していません。それを取得する方法のアイデアは非常に歓迎されています。

画像は関係を説明しています http://imageshack.us/photo/my-images/818/phparray.jpg/

4

2 に答える 2

1

私はあなたの構造を真剣に再考したいと思いますが、これが(醜い場合)実用的な解決策です

foreach ($users as $userId => $user) {
    foreach ($user['odata'] as $key => $value) {
        if (isset($rjad[$key][$value])) {
            if (!is_array($rjad[$key][$value])) {
                $colour = $rjad[$key][$value];
                $rjad[$key][$value] = array();
                $rjad[$key][$value][$colour] = array();
            } else {
                reset($rjad[$key][$value]);
                $colour = key($rjad[$key][$value]);
            }
            $rjad[$key][$value][$colour][] = $userId;
        } 
    }
}

作業デモ-> http://codepad.viper-7.com/IEcpvU

コメントに基づいて、簡単に解決できる別の配列が必要になる場合があります

// copy the array and act on it instead of directly on $rjad
$result = $rjad;
foreach ($users as $userId => $user) {
    foreach ($user['odata'] as $key => $value) {
        if (isset($result[$key][$value])) {
            if (!is_array($result[$key][$value])) {
                $colour = $result[$key][$value];
                $result[$key][$value] = array();
                $result[$key][$value][$colour] = array();
            } else {
                reset($result[$key][$value]);
                $colour = key($result[$key][$value]);
            }
            $result[$key][$value][$colour][] = $userId;
        } 
    }
}
于 2013-01-08T11:35:28.453 に答える
0

あなたの質問は完全には明確ではありません-rjad...blueと他のアレイのユーザーアカウントとの関係は何ですか?odata配列の項目0はデフォルトの色ですか?

于 2013-01-08T11:10:16.857 に答える