AMcoder - javascript, python, java, html, php, sql

Php կոդ՝ կատեգորիայի տակ ենթակատեգորիաները ցուցադրելու համար

Ես տվյալների բազայից վերցնում եմ կատեգորիայի և ենթակատուների մասին տեղեկությունները հետևյալ կերպ.

$cols=array("id","name","description","tags","subcat","img");
$result=$conn->get("category",null,$cols);`

Նկատի ունեցեք, որ արդյունքն այնպիսի բազմաչափ զանգված է, ինչպիսին $result[0]['name']-ը կցուցադրի կատեգորիայի անունը, իսկ $result[0]['subcat']-ը՝ համապատասխանաբար առաջին կատեգորիան և ենթակատեգորիան: Ահա մնացած հատվածը.

$subcat="Notset";
$cat=array();
$sub=array();
$j=0;
for ($i=0;$i<$conn->count; $i++)
{ 
    if($result[$i]['subcat'] != $subcat)
    {
        $subcat=$result[$i]['subcat'];
        $sub[$j]=$subcat;
        $j++;
    }
$cat[$i]=$result[$i]['name'];
}

Բայց ես ստանում եմ հետևյալ արդյունքը. Վեբ էջի նկարը

մուտքագրեք պատկերի նկարագրությունը այստեղ

Բայց ես ուզում եմ ցուցադրել sony-ը աշխատասեղանի կատեգորիայի տակ, իսկ macbook-ը նոութբուքի կատեգորիայի տակ, խնդրում եմ օգնեք: Վերևում գտնվող նկարում կարմիր կոճակը կանաչ կատեգորիան է ենթակատեգորիայի համար:

10.02.2017

  • Ես չեմ կարողանում հասկանալ ձեր կոդը: Ի՞նչ է այն անում: 10.02.2017
  • Խնդրում ենք var_dump($result);-ի արդյունքը տեղադրել $result=$conn->get("category",null,$cols); տողից հետո 10.02.2017
  • Դուք միայն ստուգում եք, արդյոք $result[$i]['subcat']Notset չէ: Դուք իրականում չեք ստուգում, թե որ ծնողի տակ է այն: 10.02.2017

Պատասխանները:


1

Դուք կարող եք օգտագործել հետևյալ կոդը. (Ձեր օրինակում պետք է սահմանել $fetched_categories = $result):

function get_subcategories($array, $category_name){
    $return = array();

    foreach ($array as $key => $category){
        if ($category['subcat'] == $category_name){
            $category['sub_categories'] = get_subcategories($array, $category['name']);            
            $return[] = $category;
        }
    }

    return $return;
}

function print_categories($array, $level = 0){
    echo ($level > 0 ? '<ol>' : '<ul>');

    foreach ($array as $category){
        echo '<li>' . $category['name'] . '</li>';
        print_categories($category['sub_categories'], ++$level);
    }

    echo ($level > 0 ? '</ol>' : '</ul>');
}

$fetched_categories = array();
$fetched_categories[] = ['name' => 'Camera', 'subcat' => ''];
$fetched_categories[] = ['name' => 'Macbook', 'subcat' => 'Laptops'];
$fetched_categories[] = ['name' => 'Laptops', 'subcat' => ''];
$fetched_categories[] = ['name' => 'Desktops', 'subcat' => ''];
$fetched_categories[] = ['name' => 'Sony', 'subcat' => 'Desktops'];
$fetched_categories[] = ['name' => 'DSLR', 'subcat' => 'Camera'];

$categories = get_subcategories($fetched_categories, '');

print_categories($categories);

Ահա արդյունքը.

https://eval.in/734955

10.02.2017

2

Ես դա անում եմ՝ օգտագործելով հետևյալ php կոդը.

# categories with a parent id of 0 are parent categories 
$selectparents = $db->prepare("
SELECT category_id, category_name 
FROM categories 
WHERE  parent_category_id = 0 
ORDER BY category_name
"); 

$selectparents->execute();

while($row = $selectparents->fetch(PDO::FETCH_ASSOC)){
        $p_category_id = $row['category_id'];
        $category_name = $row['category_name'];

        echo '<b>'.$category_name.'</b><br>';

            # get sub categories for this parent
            $selectchilds = $db->prepare("
            SELECT category_id, category_name 
            FROM categories 
            WHERE  parent_category_id = ".$p_category_id." 
            ORDER BY category_name
            ");
            $selectchilds->execute();

            while($row = $selectchilds->fetch(PDO::FETCH_ASSOC)){
            $category_id = $row['category_id'];
            $category_name = $row['category_name'];

            echo '<b>'.$category_name.'</b><br>';

            }   
}  

Հիմնականում բոլոր ծնողական կատեգորիաները ունեն 0-ի սահմանած parent_id, որը հարցվում է այբբենական կարգով, այնուհետև յուրաքանչյուրի համար ենթագրերը հարցվում են ծնողների համար՝ while loop-ում և մատուցվում այբբենական կարգով ծնողի տակ:

10.02.2017
Նոր նյութեր

Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..