doubipiao1611 2012-09-30 14:23
浏览 15
已采纳

用某些值排序数组?

This is an output array pushed from mysql query

Array
(
    [0] => Array
        (
            [CategoryID] => 7
            [CategoryName] => Test it
            [Parent] => 2
            [Thumb] => 4
            [sort] => 0
            [MediaID] => 4
            [MediaTitle] => asd
            [MediaName] => 1349012691_4.jpg
            [MediaType] => image
            [MediaSize] => 369848
            [UploadTime] => 1349012691
        )

    [1] => Array
        (
            [CategoryID] => 8
            [CategoryName] => Test all
            [Parent] => 4
            [Thumb] => 5
            [sort] => 0
            [MediaID] => 5
            [MediaTitle] => asaas
            [MediaName] => 1349012728_9.jpg
            [MediaType] => image
            [MediaSize] => 416817
            [UploadTime] => 1349012728
        )

    [2] => Array
        (
            [CategoryID] => 4
            [CategoryName] => Test Image
            [Parent] => 0
            [Thumb] => 0
            [sort] => 2
            [MediaID] => 
            [MediaTitle] => 
            [MediaName] => 
            [MediaType] => 
            [MediaSize] => 
            [UploadTime] => 
        )

    [3] => Array
        (
            [CategoryID] => 2
            [CategoryName] => Test Sub
            [Parent] => 1
            [Thumb] => 0
            [sort] => 4
            [MediaID] => 
            [MediaTitle] => 
            [MediaName] => 
            [MediaType] => 
            [MediaSize] => 
            [UploadTime] => 
        )

    [4] => Array
        (
            [CategoryID] => 3
            [CategoryName] => Test Category
            [Parent] => 0
            [Thumb] => 0
            [sort] => 6
            [MediaID] => 
            [MediaTitle] => 
            [MediaName] => 
            [MediaType] => 
            [MediaSize] => 
            [UploadTime] => 
        )

    [5] => Array
        (
            [CategoryID] => 1
            [CategoryName] => Test Category
            [Parent] => 0
            [Thumb] => 0
            [sort] => 8
            [MediaID] => 
            [MediaTitle] => 
            [MediaName] => 
            [MediaType] => 
            [MediaSize] => 
            [UploadTime] => 
        )

    [6] => Array
        (
            [CategoryID] => 5
            [CategoryName] => Test Category
            [Parent] => 0
            [Thumb] => 0
            [sort] => 10
            [MediaID] => 
            [MediaTitle] => 
            [MediaName] => 
            [MediaType] => 
            [MediaSize] => 
            [UploadTime] => 
        )

    [7] => Array
        (
            [CategoryID] => 6
            [CategoryName] => Test Remove
            [Parent] => 0
            [Thumb] => 0
            [sort] => 12
            [MediaID] => 
            [MediaTitle] => 
            [MediaName] => 
            [MediaType] => 
            [MediaSize] => 
            [UploadTime] => 
        )

)

I need to sort this array so it show Parents Category First then child categories.

I need the output something like

Array
(

    [2] => Array
        (
            [CategoryID] => 4
            [CategoryName] => Test Image
            [Parent] => 0
            [Thumb] => 0
            [sort] => 2
            [MediaID] => 
            [MediaTitle] => 
            [MediaName] => 
            [MediaType] => 
            [MediaSize] => 
            [UploadTime] => 
        )
        //sub category
            [1] => Array
            (
                [CategoryID] => 8
                [CategoryName] => Test all
                [Parent] => 4
                [Thumb] => 5
                [sort] => 0
                [MediaID] => 5
                [MediaTitle] => asaas
                [MediaName] => 1349012728_9.jpg
                [MediaType] => image
                [MediaSize] => 416817
                [UploadTime] => 1349012728
            )

    [3] => Array
        (
            [CategoryID] => 2
            [CategoryName] => Test Sub
            [Parent] => 1
            [Thumb] => 0
            [sort] => 4
            [MediaID] => 
            [MediaTitle] => 
            [MediaName] => 
            [MediaType] => 
            [MediaSize] => 
            [UploadTime] => 
        )
                //sub category
                [0] => Array
                (
                    [CategoryID] => 7
                    [CategoryName] => Test it
                    [Parent] => 2
                    [Thumb] => 4
                    [sort] => 0
                    [MediaID] => 4
                    [MediaTitle] => asd
                    [MediaName] => 1349012691_4.jpg
                    [MediaType] => image
                    [MediaSize] => 369848
                    [UploadTime] => 1349012691
                )

    [4] => Array
        (
            [CategoryID] => 3
            [CategoryName] => Test Category
            [Parent] => 0
            [Thumb] => 0
            [sort] => 6
            [MediaID] => 
            [MediaTitle] => 
            [MediaName] => 
            [MediaType] => 
            [MediaSize] => 
            [UploadTime] => 
        )

    [5] => Array
        (
            [CategoryID] => 1
            [CategoryName] => Test Category
            [Parent] => 0
            [Thumb] => 0
            [sort] => 8
            [MediaID] => 
            [MediaTitle] => 
            [MediaName] => 
            [MediaType] => 
            [MediaSize] => 
            [UploadTime] => 
        )

    [6] => Array
        (
            [CategoryID] => 5
            [CategoryName] => Test Category
            [Parent] => 0
            [Thumb] => 0
            [sort] => 10
            [MediaID] => 
            [MediaTitle] => 
            [MediaName] => 
            [MediaType] => 
            [MediaSize] => 
            [UploadTime] => 
        )

    [7] => Array
        (
            [CategoryID] => 6
            [CategoryName] => Test Remove
            [Parent] => 0
            [Thumb] => 0
            [sort] => 12
            [MediaID] => 
            [MediaTitle] => 
            [MediaName] => 
            [MediaType] => 
            [MediaSize] => 
            [UploadTime] => 
        )

)

Can I do this with PHP?

  • 写回答

3条回答 默认 最新

  • doupeng8494 2012-09-30 15:04
    关注

    You can try

    # Short Version of your Array
    $oldList = Array(
        "0" => Array("CategoryID" => 7,"CategoryName" => "Test it","Parent" => 2),
        "1" => Array("CategoryID" => 8,"CategoryName" => "Test all","Parent" => 4),
        "2" => Array("CategoryID" => 4,"CategoryName" => "Test Image","Parent" => 0),
        "3" => Array("CategoryID" => 2,"CategoryName" => "Test Sub","Parent" => 1),
        "4" => Array("CategoryID" => 3,"CategoryName" => "Test Category","Parent" => 0),
        "5" => Array("CategoryID" => 1,"CategoryName" => "Test Category","Parent" => 0),
        "6" => Array("CategoryID" => 5,"CategoryName" => "Test Category","Parent" => 0),
        "7" => Array("CategoryID" => 6,"CategoryName" => "Test Remove","Parent" => 0)
    );
    
    echo "<pre>";
    print_r(__group($oldList));
    

    Function used

    function __group($oldList)
    {
        # Get Category Position
        $category = array_map(function($item) { return $item['CategoryID'];}  ,$oldList); 
    
        #Get Only Parent List and add to new list
        $newList = array_filter($oldList , function($item) {  return $item['Parent']  == 0 ; } );
    
        foreach($oldList as $key => $value)
        {
            if($value['Parent'] != 0) {
                # Mapt Chiled to parent using Parent ID & Category ID 
                $newList[array_search($value['Parent'],$category)]['child'][] = $value;
            }
        }
        return $newList ;
    }
    

    Output

    Array
    (
        [2] => Array
            (
                [CategoryID] => 4
                [CategoryName] => Test Image
                [Parent] => 0
                [child] => Array
                    (
                        [0] => Array
                            (
                                [CategoryID] => 8
                                [CategoryName] => Test all
                                [Parent] => 4
                            )
    
                    )
    
            )
    
        [4] => Array
            (
                [CategoryID] => 3
                [CategoryName] => Test Category
                [Parent] => 0
            )
    
        [5] => Array
            (
                [CategoryID] => 1
                [CategoryName] => Test Category
                [Parent] => 0
                [child] => Array
                    (
                        [0] => Array
                            (
                                [CategoryID] => 2
                                [CategoryName] => Test Sub
                                [Parent] => 1
                            )
    
                    )
    
            )
    
        [6] => Array
            (
                [CategoryID] => 5
                [CategoryName] => Test Category
                [Parent] => 0
            )
    
        [7] => Array
            (
                [CategoryID] => 6
                [CategoryName] => Test Remove
                [Parent] => 0
            )
    
        [3] => Array
            (
                [child] => Array
                    (
                        [0] => Array
                            (
                                [CategoryID] => 7
                                [CategoryName] => Test it
                                [Parent] => 2
                            )
    
                    )
    
            )
    
    )
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。