从另一个创建新数组

时间:2013-01-08 11:03:55

标签: php arrays

我有一个数组:

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]键,[odata] value = [rjad]中的第二个键。

我想要的是使用第二个数组中的用户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/

2 个答案:

答案 0 :(得分: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;
        } 
    }
}

答案 1 :(得分:0)

您的问题并不完全清楚 - rjad ... blue与其他数组中的用户帐户之间的关系是什么? odata数组中的第0项是默认颜色吗?