检查数组是否包含与正在迭代的另一个数组相同的键和值。 PHP
Checking if array contains the same key and value as another array which is being iterated. PHP
首先,我使用的框架是Laravel 5.3
我想要完成的是找到一种方法来最小化我的应用程序中的查询。我正在一个餐厅网络控制面板上工作,在我应该编辑菜肴列表的视图中,形成分配给每日特别菜单的各个类别。视图预览如下所示:
我有两个查询,在对它们的结果进行一些处理后,分别生成一个不同的数组。
第一个数组名为:$selectable_categories_and_dishes
returns 数据库中所有类别和菜肴的数组(这包括已经选择的类别和相应的菜肴)。
数组的对象和结构:
{
"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
returns 最初创建每日特色菜单时选择的所有类别和菜肴的数组。
数组的对象和结构:
{
"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);
}
假设您可以控制数组的结构,我的建议是让菜肴成为一个关联数组,并将键作为菜肴 ID。然后当你循环检查你所在的那个存在于 selected
本质上这将是一个结构:
{
"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.
}
}
首先,我使用的框架是Laravel 5.3
我想要完成的是找到一种方法来最小化我的应用程序中的查询。我正在一个餐厅网络控制面板上工作,在我应该编辑菜肴列表的视图中,形成分配给每日特别菜单的各个类别。视图预览如下所示:
我有两个查询,在对它们的结果进行一些处理后,分别生成一个不同的数组。
第一个数组名为:$selectable_categories_and_dishes
returns 数据库中所有类别和菜肴的数组(这包括已经选择的类别和相应的菜肴)。
数组的对象和结构:
{
"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
returns 最初创建每日特色菜单时选择的所有类别和菜肴的数组。
数组的对象和结构:
{
"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);
}
假设您可以控制数组的结构,我的建议是让菜肴成为一个关联数组,并将键作为菜肴 ID。然后当你循环检查你所在的那个存在于 selected
本质上这将是一个结构:
{
"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.
}
}