【问题标题】:Checking if array contains the same key and value as another array which is being iterated. PHP检查数组是否包含与正在迭代的另一个数组相同的键和值。 PHP
【发布时间】:2016-10-20 13:19:46
【问题描述】:

首先,我使用的框架是 Laravel 5.3

我想要完成的是找到一种方法来最小化我的应用程序中的查询。我正在餐厅网络控制面板上工作,我应该在视图上编辑分配给每日特殊菜单的各个类别的菜肴列表。视图预览如下所示:

我有两个查询,在对它们的结果进行一些工作后,会生成一个不同的数组。

第一个数组名为:$selectable_categories_and_dishes 返回数据库中所有类别和菜肴的数组(包括已选择的类别和相应菜肴)。

数组的对象和结构:

{
  "id_category":4,
  "category_name":"Contorno ",
  "dishes":[
            {
             "id":15,
             "price":"10",
             "name":"Patate al Forno"
            },
            {
             "id":16,
             "price":
             "8","name":"Verdure alla Griglia"
            },
            {
             "id":17,
             "price":"8",
             "name":"Insalata Mista"
            }
          ],
}

第二个数组名为:$selected_categories_and_dishes 返回最初创建每日特别菜单时选择的所有类别和菜肴的数组。 数组的对象和结构:

{
  "id_category":4,
  "category_name":"Contorno ",
  "dishes":[
            {
             "id":15,
             "price":"10",
             "name":"Patate al Forno",
             "id_pcm":"4"
            },
            {
             "id":16,
             "price":"8",
             "name":"Verdure alla Griglia",
             "id_pcm":"4"
            },
            {
             "id":17,
             "price":"8",
             "name":"Insalata Mista",
             "id_pcm":"4"
            }
          ],
}

我想不通的是一种将这些数组合并在一起的方法,当我循环合并的数组时,所有选定的菜都会被检查。

我该怎么做?

编辑

我生成这个数组id的方式如下:

 $menu_categories = DB::select('SELECT id , name FROM `packages_menu_categories` WHERE visible = "yes" AND `delete` = "no"');
        $selectable_categories_and_dishes = array();
        foreach ($menu_categories as $menu_category)
        {
            $dishes =  DB::select('SELECT d.id , d.price , d.name FROM `package_menu_categories_dishes` p LEFT JOIN `dishes` d ON p.id_dish = d.id WHERE p.visible = "yes" AND p.delete = "no" AND p.id_package_menu_category ='.$menu_category->id);
            $object=
                [
                    'id_category' => $menu_category->id,
                    'category_name' =>$menu_category->name,
                    'dishes' => $dishes
                ];

            array_push($selectable_categories_and_dishes,$object);
        }

        $selected_categories = DB::select('SELECT c.id as id_category , c.name as category_name FROM sub_packages_dishes s LEFT JOIN packages_menu_categories c ON s.id_package_menu_category = c.id WHERE s.id_sub_package = '.$id.' GROUP BY s.id_package_menu_category');
        $dishes_and_categories  = array();
        foreach ($selected_categories as $selected_category)
        {
            $dishes =  DB::select('SELECT s.id AS id_pmcd , d.id , d.name FROM `sub_packages_dishes` s LEFT JOIN `dishes` d ON s.id_dish = d.id WHERE s.id_sub_package ='.$id.' AND s.id_package_menu_category ='.$selected_category->id_category);
            $object=
                [
                    'id_category' => $selected_category->id_category,
                    'category_name' =>$selected_category->category_name,
                    'dishes' => $dishes
                ];
            array_push($dishes_and_categories,$object);
        }

【问题讨论】:

  • 你能举一个例子说明你想要的数组应该是什么样子吗?
  • 我的建议是假设您可以控制阵列的结构,将盘子设置为 associative arraykey 作为盘子 ID。然后当你循环检查你所在的那个是否存在于所选中。
  • 该数组可能类似于上面的数组,但在菜对象数组中带有一个标志,例如:{ "id":17, "price":"8", "name":" Insalata Mista", "id_pcm":"4", "checked":"1" } @simon
  • @nerdlyist 这也是个好主意...我会尝试一下并让您知道...谢谢
  • @nerdlyist 那是要走的路。事实证明这比我想象的要简单得多。发表您的评论作为答案,以便我可以将其标记为一个。非常感谢。

标签: php arrays laravel-5 arrayobject


【解决方案1】:

假设您可以控制数组的结构,我的建议是使菜成为关联数组,并将键作为菜 id。然后当你循环检查你所在的那个是否存在于所选中

基本上这是一个结构:

{
"id_category":4,
"category_name":"Contorno ",
"dishes":{
    15 => {
        "price":"10",
        "name":"Patate al Forno",
        "id_pcm":"4"
    },
    16 => {
        "price":"8",
        "name":"Verdure alla Griglia",
        "id_pcm":"4"
    }
    ...
}

然后,当你循环你的数组时,它就这么简单。这可能不是 100%,但可以理解。

foreach($selectable_categories_and_dishes as $key => $values){
    if(isset($selected_categories['dishes'][$key])){
        //This is selected so check the box. 
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 2012-03-28
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多