代码之家  ›  专栏  ›  技术社区  ›  thecodedeveloper.com Marco Johannesen

在类别内显示职务,但同一类别不重复

  •  1
  • thecodedeveloper.com Marco Johannesen  · 技术社区  · 10 年前

    以下代码:

    $services = $this->find('all', array(
                'contain' => array('Category','Country'),
                'joins' => array(
                     array('table' => 'services_to_categories',
                        'alias' => 'ServiceCategory',
                        'type' => 'INNER',
                        'conditions' => array(
                            'ServiceCategory.service_id = Service.id'
                        )
                    )
                ),
                'group' => 'Service.id'
            ));
            return $services;
    

    给我这个输出:

        Array
        (
            [0] => Array
                (
                    [Service] => Array
                        (
                            [id] => 6
                            [job_title] => director 
                        )
                    [Category] => Array
                        (
                            [0] => Array
                                (
                                    [id] => 1
                                    [category] => Accounting & Financial
                                )
                            [1] => Array
                                (
                                    [id] => 3
                                    [category] => Awards & Incentives
                                )
                            [2] => Array
                                (
                                    [id] => 7
                                    [category] => Data Management
                                )
                        )
                )
            [1] => Array
                (
                    [Service] => Array
                        (
                            [id] => 11
                            [job_title] => d
    
                        )
                    [Category] => Array
                        (
                            [0] => Array
                                (
                                    [id] => 7
                                    [category] => Data Management
                                )
                            [1] => Array
                                (
                                    [id] => 10
                                    [category] => Internet Services
                                )
                        )
                )
            [2] => Array
                (
                    [Service] => Array
                        (
                            [id] => 12 
                            [job_title] => e
                        )
                    [Category] => Array
                        (
                            [0] => Array
                                (
                                    [id] => 4
                                    [category] => Business Consulting
                                )
                            [1] => Array
                                (
                                    [id] => 7
                                    [category] => Data Management
                                )
                        )
                )
            )
    

    我需要输出如下:

    Accounting & Financial
    job_title: director 
    
    Awards & Incentives
    job_title: director
    
    Data Management
    job_title: director 
    job_title: d
    job_title: e
    
    Internet Services
    job_title: d
    
    Business Consulting
    job_title: e
    

    如何像上面的输出一样使用这个数组变量$services?

    2 回复  |  直到 10 年前
        1
  •  1
  •   Quixrick    10 年前

    基本上,我所做的就是循环遍历数组并创建一个新数组,其中类别为关键字,职务为值数组。然后我循环遍历我的新数组并吐出键和值。

    <?php
    
    $category_array = array();
    
    
    // LOOP THROUGH THE MAIN ARRAY AND RESTRUCTURE IT
    foreach ($start_array AS $array_element) {
        foreach ($array_element['Category'] AS $category) {
            $category_array[$category['category']][] = $array_element['Service']['job_title'];
        }
    }
    
    
    // LOOP THROUGH OUR NEW ARRAY AND PRINT OUT THE KEY AND VALUES
    foreach ($category_array AS $department => $job_title_array) {
        print $department;
        foreach ($job_title_array AS $job_title) {
            print "\njob_title: ".$job_title;
        }
        print "\n\n";
    }
    

    Here is a working demo

        2
  •  0
  •   Jasper N. Brouwer    10 年前

    你不能用查询来解决这个问题。

    你想要的是这样的:

    +------------------------+----------+
    | Accounting & Financial | director |
    +------------------------+----------+
    | Data Management        | director |
    |                        +----------+
    |                        | d        |
    |                        +----------+
    |                        | e        |
    +------------------------+----------+
    

    显然,SQL与表一起工作,而不是嵌套的树,所以这是不可能的。

    1) SQL将为您提供(使用 GROUP BY Service.job_title ):

    +------------------------+----------+
    | Accounting & Financial | director |
    +------------------------+----------+
    | Data Management        | d        |
    +------------------------+----------+
    | Data Management        | e        |
    +------------------------+----------+
    

    2) 或者这个(使用 GROUP BY Category.category ):

    +------------------------+----------+
    | Accounting & Financial | director |
    +------------------------+----------+
    | Data Management        | director |
    +------------------------+----------+
    

    3) 或这个(不使用 GROUP BY ):

    +------------------------+----------+
    | Accounting & Financial | director |
    +------------------------+----------+
    | Data Management        | director |
    +------------------------+----------+
    | Data Management        | d        |
    +------------------------+----------+
    | Data Management        | e        |
    +------------------------+----------+
    

    在情况1中,您正在丢失数据: Data Management | director 结果不再是。

    在案例2中,您也会丢失数据: Data Management | d Data Management | e 不再是结果。

    所以你必须去看案例3。然后手动(在代码中)将此结果转换为所需的嵌套数组。

    PS:这些是伪结果。实际结果将取决于与数据库相关的各种因素。