使用 foreach 循环比较两个数组


Compare two arrays using foreach loop

在PHP中,我将编辑一些实体,例如一个名为:ABC的项目,该项目属于许多国家/地区,而添加此项目时,我使用了<select multiple="multiple">并将所有选定的国家/地区存储在项目国家/地区表中。现在,当我开始编辑这个项目时,我使用相同的逻辑,但稍作更改:

  1. 从国家/地区表中填充所有国家/地区
  2. 从项目国家/地区表中获取与项目ID关联的所有国家/地区

我得到了两个数组:

Array ( 
    [0] => Array ( [countryId] => 1 [countryName] => Pakistan ) 
    [1] => Array ( [countryId] => 2 [countryName] => China ) 
) 

步骤 1 的输出

Array ( 
    [0] => Array ( [pcId] => 1 [countryId] => 1 [projectId] => 1 ) 
    [1] => Array ( [pcId] => 2 [countryId] => 2 [projectId] => 1 ) 
)

步骤 2 的输出

但我感到困惑如何证明名为中国的国家已经与该项目相关联(已在<select multiple="multiple">中选择)

因为为了创建<select multiple="multiple">我使用了foreach循环。现在我无法猜测如何在 foreach 循环中比较两个数组,以便我在 <option> 中设置selected="selected"

遍历所有国家/地区并检查该国家/地区是否存在于projectCountries输出数组中。

像这样:

$pc_list = array();
foreach($project_countries as $pc) {
    $pc_list[] = $pc['countryId'];  
}
foreach($countries as &$country) {
    if(in_array($country['countryId'], $pc_list)) {
        $country['selected'] = TRUE;
    }
}

选项 1:运行步骤 1 的 foreach 循环。在每次迭代中,您可以遍历第二个数组并检查是否有具有当前 id 的国家/地区(从第一个循环开始)。

选项 2:将 SQL 查询更改为类似的东西(例如,使用连接):

国家编号

国家名称项目编号
1 巴基斯坦 1
2 中国 1
3 德国空