douyuanqia665858 2013-01-08 11:03
浏览 23
已采纳

too long

i have an array:

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
                )

        )

)

in this array [rjad] key = [odata] key, and [odata] value = second key in [rjad].

What i want is to create new array from old one with user ids values in second array:

like this:

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

            )

Struggling already 3 hours with no success. Any ideas how to get it are very wellcome.

Image do explain relatinships http://imageshack.us/photo/my-images/818/phparray.jpg/

  • 写回答

2条回答 默认 最新

  • duanchen7703 2013-01-08 11:35
    关注

    I'd seriously rethink your structure, but here's a working (if ugly) solution

    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;
            } 
        }
    }
    

    Working demo -> http://codepad.viper-7.com/IEcpvU

    Based on comments seems you may want a separate array, which is easily solved

    // 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条)

报告相同问题?

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度