1

PHP には、次の構造のデータを含む $listing という 2 次元配列があります。

(
    [1] => Array
        (
            [category] => tech
            [business_name] => Apple
        )

    [2] => Array
        (
            [category] => food
            [business_name] => McDonalds
        )

    [3] => Array
        (
            [category] => tech
            [business_name] => Dell
        )

)

これを、カテゴリ(アルファベット順) と *business_name* (アルファベット順) でグループ化されたプレーン テキストで出力したいと考えています。これは、これがどのように表示されるかのサブセットにすぎないことに注意してください。50 のカテゴリと 1000 のリストが存在する可能性があるため、コードではそれを考慮する必要があります。

したがって、上記のように $listing の出力を使用すると、次のように出力する必要があります。

category: food
business_name: McDonalds

category: tech
business_name: Apple
business_name: Dell

助けてください。前もって感謝します。

4

3 に答える 3

2

これを行う方法はたくさんありますが、これで始められるはずです。

$data = array();

foreach ($listing as $item) {
    $data[$item['category']][] = $item['business_name'];
}

ksort($data);

$data = array_map(function($names) {
    sort($names);
    return $names;
}, $data);

未テスト...

于 2013-02-24T05:57:51.493 に答える
0

PHP multiarray sort http://www.php.net/manual/en/function.array-multisort.phpを見て、配列をマルチソートしてください。それが役立つかどうかを確認してください

于 2013-02-24T05:56:33.867 に答える
0

array_multisort() 関数を使用しました。以下のコードを見てください。

                         <?php

                //array to sort 
                $data[0] = array('category'=> 'tech','business_name' => 'apple')  ;
                $data[1] = array('category'=> 'food','business_name' => 'McDonalds')  ;
                $data[2] = array('category'=> 'tech','business_name' => 'dell')  ;
                $data[3] = array('category'=> 'food','business_name' => 'subway')  ;

                foreach($data as $key => $val){
                 $cat[$key] = $val['category'];
                 $bus[$key] = $val['business_name'];
                }

                // Sort the data with category and business_name with ascending order
                array_multisort($cat, SORT_ASC, $bus, SORT_ASC, $data);
       //         echo "<pre>";print_r($data);echo "</pre>";unset($val);

                //put the category as key And business name as value with comma seperated.
                $category = array();
                foreach($data as $key => $val){
                    if(array_key_exists($val['category'],$category ))
                    {
                        $category[$val['category']] = $category[$val['category']].', '.$val['business_name'];
                    }
                    else
                    {
                        $category[$val['category']] = $val['business_name']; // $category 
                    }   
                }

                //print the sorted data

                foreach($category as $key => $val){
                    //print category
                    echo "<br /> <br />Category: ".$key;
                    $b_name = explode(',', $val);
                    //to print busniess name
                    foreach($b_name as $k => $v){
                        echo "<br />Business Name: ".$v;
                    }
                 }


                ?>




        //OUTPUT


       Category: food
       Business Name: McDonalds
       Business Name: subway

       Category: tech
       Business Name: apple
       Business Name: dell 
于 2013-02-24T06:54:10.480 に答える