为了账号安全,请及时绑定邮箱和手机立即绑定

如何从 PHP 中的类别/子类别数组中获取常见的子类别?

如何从 PHP 中的类别/子类别数组中获取常见的子类别?

PHP
米琪卡哇伊 2022-01-14 18:14:04
我有一个像这样的数组:ProductCategory 对象的定义如下:class ProductCategory{    public $name;    public $id;    public $subcategory;    public function __construct($categoryName, $categoryId, $subcategory){        $this->name = $categoryName;        $this->id = $categoryId;        $this->subcategory = $subcategory;    }}ProductSubcategory 的定义如下:class ProductSubcategory{    public $name;    public $id;    public function __construct($subcategoryName, $subcategoryId){        $this->name = $subcategoryName;        $this->id = $subcategoryId;    }我正在尝试获取属于同一类别的所有子类别。例如,在上面数组的位置 0 和 1,Glass 和 Accessories 子类别都属于 Non Medicated 类别。最终,我试图获得这样的显示(我不想显示类别和子类别编号,但我需要它们以供以后使用):非药物(id = 6)玻璃(类别 ID = 6,子类别 ID = 409)配件(categoryid = 6,subcategoryid = 46)润唇膏洗剂馏出物墨盒酊剂胶囊汽化器衬衫CBD沐浴炸弹食品注入食用(id = 4)软糖(categoryid = 4,subcategoryid = 26)巧克力棒焙烤食品酊剂食用油糖果胶囊/丸集中活树脂馏出物酱糖(每个)墨盒/笔无溶剂BHO最终输出将是用户可以单击的单选按钮 - 如果他们单击父类别,产品将按该父类别过滤。如果他们单击子类别,产品将按该父类别以及子类别进行过滤。我唯一尝试过的是我从数组中获得了一个不同的父类别列表,并尝试遍历它们,然后为每个父类别循环遍历上面的数组并检查类别是否与父类别匹配,然后附加子类别对象。出于某种原因,我无法让它工作。我不知道我是否只需要放弃使用对象本身并返回一组名称和 ID 或什么。任何指导将不胜感激。这与我昨天提出的一个问题有关,其中有人帮助我重新设计了 ProductCategory 对象。我比昨天更近了,但仍然不在那里。
查看完整描述

3 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

下面的代码可能会帮助您处理原始数组(您可以通过 toArray() 来完成),


$parentCategories = [6, 4, 3, 2];

$result           = [];

foreach ($parentCategories as $key => $pv) {

    foreach ($childCategories as $cv) {

        if ($pv == $cv['id']) {

            if (empty($result[$cv['id']]['name'])) {

                $result[$cv['id']]['data']['id'] = $pv;

                $result[$cv['id']]['data']['name']       = $cv['name'];

            }

            $result[$cv['id']]['children'][] = $cv['subcategory'];

        }

    }

}



输出:-


                      (

                            [name] => Cartridges

                            [id] => 17579

                        )


                    [6] => Array

                        (

                            [name] => Tincture

                            [id] => 17644

                        )


                    [7] => Array

                        (

                            [name] => Capsules

                            [id] => 17645

                        )


                    [8] => Array

                        (

                            [name] => Vaporizers

                            [id] => 42

                        )


                    [9] => Array

                        (

                            [name] => Shirts

                            [id] => 44

                        )


                    [10] => Array

                        (

                            [name] => CBD Bath Bomb

                            [id] => 19461

                        )


                    [11] => Array

                        (

                            [name] => Edibles

                            [id] => 17580

                        )


                )


        )


    [4] => Array

        (

            [data] => Array

                (

                    [id] => 4

                    [name] => Infused Edible

                )


            [children] => Array

                (

                    [0] => Array

                        (

                            [name] => Gummies

                            [id] => 26

                        )


                    [1] => Array

                        (

                            [name] => Chocolate Bars

                            [id] => 25

                        )


                    [2] => Array

                        (

                            [name] => Baked Goods

                            [id] => 23

                        )


                    [3] => Array

                        (

                            [name] => Tincture

                            [id] => 29

                        )


                    [4] => Array

                        (

                            [name] => Cooking Oil

                            [id] => 18864

                        )


                    [5] => Array

                        (

                            [name] => Sweets

                            [id] => 27

                        )


                    [6] => Array

                        (

                            [name] => Capsules/Pills

                            [id] => 22

                        )


                )


        )


    [3] => Array

        (

            [data] => Array

                (

                    [id] => 3

                    [name] => Cartridges / Pens

                )


            [children] => Array

                (

                    [0] => Array

                        (

                            [name] => Solventless

                            [id] => 18051

                        )


                    [1] => Array

                        (

                            [name] => BHO

                            [id] => 10

                        )


                )


        )


    [2] => Array

        (

            [data] => Array

                (

                    [id] => 2

                    [name] => Concentrate

                )


            [children] => Array

                (

                    [0] => Array

                        (

                            [name] => Live Resin

                            [id] => 15

                        )


                    [1] => Array

                        (

                            [name] => Distillate

                            [id] => 18005

                        )


                    [2] => Array

                        (

                            [name] => Sauce

                            [id] => 18767

                        )


                    [3] => Array

                        (

                            [name] => RSO

                            [id] => 18865

                        )


                    [4] => Array

                        (

                            [name] => Sugar (Each)

                            [id] => 18876

                        )


                )


        )


)

我从逻辑上得到脚本的输出,


foreach ($result as $key => $value) {

    echo "<ul>";

    echo "<li>" . $value['data']['name'] . '(' . 'id=' . $value['data']['id'] . ')';

    echo "<ul>";

    foreach ($value['children'] as $k => $value1) {

        echo "<li>";

        if ($k == 0) {

            echo $value1['name'] . "(" . 'categoryid = ' . $value['data']['id'] . ', subcategoryid = ' . $value1['id'] . ")";

        } else {

            echo $value1['name'];

        }

        echo "</li>";

    }

    echo "</ul></li></ul>";

}

输出为


<ul>

  <li>Non Medicated(id=6)

    <ul>

      <li>Glass(categoryid = 6, subcategoryid = 409)</li>

      <li>Accesories</li>

      <li>Lip Balm</li>

      <li>Lotion</li>

      <li>Distillate</li>

      <li>Cartridges</li>

      <li>Tincture</li>

      <li>Capsules</li>

      <li>Vaporizers</li>

      <li>Shirts</li>

      <li>CBD Bath Bomb</li>

      <li>Edibles</li>

    </ul>

  </li>

</ul>

<ul>

  <li>Infused Edible(id=4)

    <ul>

      <li>Gummies(categoryid = 4, subcategoryid = 26)</li>

      <li>Chocolate Bars</li>

      <li>Baked Goods</li>

      <li>Tincture</li>

      <li>Cooking Oil</li>

      <li>Sweets</li>

      <li>Capsules/Pills</li>

    </ul>

  </li>

</ul>

<ul>

  <li>Cartridges / Pens(id=3)

    <ul>

      <li>Solventless(categoryid = 3, subcategoryid = 18051)</li>

      <li>BHO</li>

    </ul>

  </li>

</ul>

<ul>

  <li>Concentrate(id=2)

    <ul>

      <li>Live Resin(categoryid = 2, subcategoryid = 15)</li>

      <li>Distillate</li>

      <li>Sauce</li>

      <li>RSO</li>

      <li>Sugar (Each)</li>

    </ul>

  </li>

</ul>


查看完整回答
反对 回复 2022-01-14
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

$categories我像你一样创建了一个假对象( )。


希望这可以帮助:


<?php


 $categories = array();


 $obj0 = new stdClass;

 $obj0->id = 123;

 $obj0->name = "Non Medicated";

 $obja = new stdClass;

 $obja->name = "Glass";

 $obja->id = 409;

 $obj0->subcategory =$obja;

 $categories[0] = $obj0;


 $obj1 = new stdClass;

 $obj1->id = 124;

 $obj1->name = "Non Medicated";

 $obj1a = new stdClass;

 $obj1a->name = "Capsules";

 $obj1a->id = 410;

 $obj1->subcategory =$obj1a;

 $categories[1] = $obj1;


 $obj2 = new stdClass;

 $obj2->id = 125;

 $obj2->name = "Non Medicated";

 $obj2a = new stdClass;

 $obj2a->name = "Capsules";

 $obj2a->id = 411;

 $obj2->subcategory =$obj2a;

 $categories[2] = $obj2;


 $toRet =array();


 foreach($categories as $category){

    $cat = $category->name;

    $toRet[$cat][] = $category->subcategory;

 }


 var_dump($toRet);

这是var_dump函数的输出:


array(1) { ["Non Medicated"]=> array(3) { [0]=> object(stdClass)#2 (2) { ["name"]=> string(5) "Glass" ["id"]=> int(409) } [1]=> object(stdClass)#4 (2) { ["name"]=> string(8) "Capsules" ["id"]=> int(410) } [2]=> object(stdClass)#6 (2) { ["name"]=> string(8) "Capsules" ["id"]=> int(411) } } }



查看完整回答
反对 回复 2022-01-14
?
白衣非少年

TA贡献1155条经验 获得超0个赞

不确定我是否理解你想要的,但如果你只需要显示类别和子类别,你可以做这样的事情吗?


foreach($categories as $key => $category){


    echo $category->name;

    echo $category->id;


    foreach($category->subcategory as $key2 => $subCategory){


        echo $subCategory->name;

        echo $subCategory->id;

        echo $category->id;

    }

}       


查看完整回答
反对 回复 2022-01-14
  • 3 回答
  • 0 关注
  • 152 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信