PHP按键和值创建数组组

时间:2018-11-01 05:18:57

标签: php arrays codeigniter

我下面的PHP代码中有一个数组,我想将此数组转换为按数据值分组。简化数组总是很难的

     Array
(
    [0] => Array
        (
            [video_id] => 14
            [video_title] => test1
            [video_category_name] => Beginner
            [video_category] => 1
        )

    [1] => Array
        (
            [video_id] => 18
            [video_title] => test
            [video_category] => 1
            [video_category_name] => Beginner
        )

    [2] => Array
        (
            [video_id] => 17
            [video_title] => first
            [video_category] => 3
            [video_category_name] => Mobility
        )

    [3] => Array
        (
            [video_id] => 19
            [video_title] => second
            [video_category] => 3
            [video_category_name] => Mobility
        )
)

我希望这个数组:

(
    [0] => Array
    (

         [ctg_name] => Beginner
          [cat_id] => 1
          [ data]  => Array
                (
                (
                    [0] => Array
                    (

                        [video_id] => 14
                        [video_title] => test1
                        [video_category_name] => Beginner
                        [video_category] => 1
                    )
                    [1] => Array
                    (

                         [video_id] => 18
                        [video_title] => test
                        [video_category] => 1
                        [video_category_name] => Beginner
                    )
                )   

    )
     [1] => Array
    (

          [ctg_name] => Mobility
          [cat_id] => 3
          [ data]  => Array
                (
                    [0] => Array
                    (

                        [video_id] => 17
                        [video_title] => first
                        [video_category] => 3
                        [video_category_name] => Mobility
                    )
                    [1] => Array
                    (

                         [video_id] => 19
                        [video_title] => second
                        [video_category] => 3
                        [video_category_name] => Mobility
                    )
                ) 
    )
)

我尝试过,但是没有得到预期的结果。

foreach($video as $val){
            $result[$val['video_category']][] = $val;
        }

它返回如下:

     Array
(
    [1] => Array
        (
                    [0] => Array
                    (

                        [video_id] => 14
                        [video_title] => test1
                        [video_category_name] => Beginner
                        [video_category] => 1
                    )
                    [1] => Array
                    (

                         [video_id] => 18
                        [video_title] => test
                        [video_category] => 1
                        [video_category_name] => Beginner
                    )
        )  

    [3] => Array
    (
         [0] => Array
                (

                    [video_id] => 17
                    [video_title] => first
                    [video_category] => 3
                    [video_category_name] => Mobility
                )
                [1] => Array
                (

                     [video_id] => 19
                    [video_title] => second
                    [video_category] => 3
                    [video_category_name] => Mobility
                )


    )
)    

有人有这样做的有效方法吗? 请帮我 谢谢

     Array
(
    [0] => Array
        (
            [video_id] => 14
            [video_title] => test1
            [video_category_name] => Beginner
            [video_category] => 1
        )

    [1] => Array
        (
            [video_id] => 18
            [video_title] => test
            [video_category] => 1
            [video_category_name] => Beginner
        )

    [2] => Array
        (
            [video_id] => 17
            [video_title] => first
            [video_category] => 3
            [video_category_name] => Mobility
        )

    [3] => Array
        (
            [video_id] => 19
            [video_title] => second
            [video_category] => 3
            [video_category_name] => Mobility
        )
)

我希望这个数组:

(
    [0] => Array
    (

         [ctg_name] => Beginner
          [cat_id] => 1
          [ data]  => Array
                (
                (
                    [0] => Array
                    (

                        [video_id] => 14
                        [video_title] => test1
                        [video_category_name] => Beginner
                        [video_category] => 1
                    )
                    [1] => Array
                    (

                         [video_id] => 18
                        [video_title] => test
                        [video_category] => 1
                        [video_category_name] => Beginner
                    )
                )   

    )
     [1] => Array
    (

          [ctg_name] => Mobility
          [cat_id] => 3
          [ data]  => Array
                (
                    [0] => Array
                    (

                        [video_id] => 17
                        [video_title] => first
                        [video_category] => 3
                        [video_category_name] => Mobility
                    )
                    [1] => Array
                    (

                         [video_id] => 19
                        [video_title] => second
                        [video_category] => 3
                        [video_category_name] => Mobility
                    )
                ) 
    )
)

我尝试过,但是没有得到预期的结果。

foreach($video as $val){
            $result[$val['video_category']][] = $val;
        }

它返回如下:

     Array
(
    [1] => Array
        (
                    [0] => Array
                    (

                        [video_id] => 14
                        [video_title] => test1
                        [video_category_name] => Beginner
                        [video_category] => 1
                    )
                    [1] => Array
                    (

                         [video_id] => 18
                        [video_title] => test
                        [video_category] => 1
                        [video_category_name] => Beginner
                    )
        )  

    [3] => Array
    (
         [0] => Array
                (

                    [video_id] => 17
                    [video_title] => first
                    [video_category] => 3
                    [video_category_name] => Mobility
                )
                [1] => Array
                (

                     [video_id] => 19
                    [video_title] => second
                    [video_category] => 3
                    [video_category_name] => Mobility
                )


    )
)    

有人有这样做的有效方法吗? 请帮我 谢谢

2 个答案:

答案 0 :(得分:2)

尝试此代码

<?php
$arr = array(
    0 => array
    (
        'video_id' => 14,
        'video_title' => 'test1',
        'video_category_name' => 'Beginner',
        'video_category' => 1
    ),
    1 => array
    (
        'video_id' => 18,
        'video_title' => 'test',
        'video_category' => 1,
        'video_category_name' => 'Beginner'
    ),
    2 => array
    (
        'video_id' => 17,
        'video_title' => 'first',
        'video_category' => 3,
        'video_category_name' => 'Mobility'
    ),
    3 => array
    (
        'video_id' => 19,
        'video_title' => 'second',
        'video_category' => 3,
        'video_category_name' => 'Mobility'
    )
);
echo "<pre>";
$newArr = array();
foreach($arr as $k=>$v){
    $newArr[$v['video_category_name']]['ctg_name']=$v['video_category_name'];
    $newArr[$v['video_category_name']]['cat_id']=$v['video_category'];
    $newArr[$v['video_category_name']]['data'][]=$v;
}
$newArr1 = array();
foreach($newArr as $k=>$v){
   $newArr1[] = $v;
}
print_r($newArr);
?>
  

输出

Array
(
    [Beginner] => Array
        (
            [ctg_name] => Beginner
            [cat_id] => 1
            [data] => Array
                (
                    [0] => Array
                        (
                            [video_id] => 14
                            [video_title] => test1
                            [video_category_name] => Beginner
                            [video_category] => 1
                        )

                    [1] => Array
                        (
                            [video_id] => 18
                            [video_title] => test
                            [video_category] => 1
                            [video_category_name] => Beginner
                        )

                )

        )

    [Mobility] => Array
        (
            [ctg_name] => Mobility
            [cat_id] => 3
            [data] => Array
                (
                    [0] => Array
                        (
                            [video_id] => 17
                            [video_title] => first
                            [video_category] => 3
                            [video_category_name] => Mobility
                        )

                    [1] => Array
                        (
                            [video_id] => 19
                            [video_title] => second
                            [video_category] => 3
                            [video_category_name] => Mobility
                        )

                )

        )

)

答案 1 :(得分:1)

您可以尝试一下。在您的foreach循环之后。

foreach($video as $val){
    $result[$val['video_category']][] = $val;
}
$final_arr = [];
foreach($result as $val){
    $final_arr[] = [
                'ctg_name'=>$val[0]['video_category_name'],
                'cat_id'=>$val[0]['video_category'],
                'data'=>$val
                ]
}