Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何筛选键所在的数组';php中的s值匹配_Php_Arrays_Filter - Fatal编程技术网

如何筛选键所在的数组';php中的s值匹配

如何筛选键所在的数组';php中的s值匹配,php,arrays,filter,Php,Arrays,Filter,我不知道如何做到这一点,但我想过滤一组数据结果,同时迭代另一组。正确的方法是什么?我正在尝试array_filter,但我不确定我是否掌握了如何使其与sql where语句类似: 编辑:下面这些查询是对MySQL数据库的查询 $arr_years = $wpdb->get_results("SELECT id, submodel_id, year FROM `subyears` ORDER by submodel_id", ARRAY_A); $arr_submodels

我不知道如何做到这一点,但我想过滤一组数据结果,同时迭代另一组。正确的方法是什么?我正在尝试array_filter,但我不确定我是否掌握了如何使其与sql where语句类似: 编辑:下面这些查询是对MySQL数据库的查询

    $arr_years = $wpdb->get_results("SELECT id, submodel_id, year FROM `subyears` ORDER by submodel_id", ARRAY_A);
    $arr_submodels = $wpdb->get_results("SELECT id, model_id, sub_name FROM `submodels` ORDER by model_id", ARRAY_A);
    foreach($arr_submodels as $submodel){
        $filtered = array_filter($arr_years, function ($value,$key){
            return $value == $submodel->id && $key == 'year';
        });
    //do something with $filtered here
    }
基本上我想要“where submodel_id==另一个数组的id”的等价物。 我想array_map可以做我想做的,但我也不明白,但如果这是一个更好的方法,请让我知道并告诉我如何做? 谢谢

编辑:添加了数组的示例输出片段: $arr_年:

array(50) { [0]=> array(3) { ["id"]=> string(1) "1" ["submodel_id"]=> string(1) "2" ["year"]=> string(4) "2020" } [1]=> array(3) { ["id"]=> string(1) "2" ["submodel_id"]=> string(1) "3" ["year"]=> string(4) "2020" } [2]=> array(3) { ["id"]=> string(1) "3" ["submodel_id"]=> string(1) "4" ["year"]=> string(4) "2020" } [3]=> array(3) { ["id"]=> string(1) "4" ["submodel_id"]=> string(1) "5" ["year"]=> string(4) "2020" } [4]=> array(3) { ["id"]=> string(1) "5" ["submodel_id"]=> string(1) "6" ["year"]=> string(4) "2020" } }
$arr_子模型:

array(50) { [0]=> array(3) { ["id"]=> string(1) "2" ["model_id"]=> string(2) "22" ["sub_name"]=> string(13) "RMK KHAOS 155" } [1]=> array(3) { ["id"]=> string(1) "3" ["model_id"]=> string(2) "22" ["sub_name"]=> string(7) "RMK 144" } [2]=> array(3) { ["id"]=> string(1) "4" ["model_id"]=> string(2) "22" ["sub_name"]=> string(11) "PRO-RMK 155" } [3]=> array(3) { ["id"]=> string(1) "5" ["model_id"]=> string(2) "22" ["sub_name"]=> string(11) "PRO-RMK 163" } [4]=> array(3) { ["id"]=> string(1) "6" ["model_id"]=> string(2) "22" ["sub_name"]=> string(11) "PRO-RMK 174" } [5]=> array(3) { ["id"]=> string(1) "7" ["model_id"]=> string(2) "23" ["sub_name"]=> string(7) "SKS 146" } }

我在sql中不这样做的原因是我需要从years表中为每个子模型id创建一个逗号分隔的年份列表……这是一个多对一关系


谢谢

根据新信息,这是您可能想要的:

$arr = $wpdb->get_results("
  SELECT GROUP_CONCAT(sy.year) as years,
  sm.model_id as model_id,
  sm.sub_name as sub_name
  FROM `subyears` sy
  JOIN `submodels` sm
  ON sy.submodel_id=sm.id
  GROUP BY sm.model_id
  ORDER BY sm.model_id
");
返回数组中的“年份”列将包含所有年份。默认情况下,它们以逗号分隔

---下面是老答案---

您应该在查询本身中执行此操作:

$arr = $wpdb->get_results("
  SELECT sy.id, sy.year, sm.id, sm.model_id, sm.sub_name
  FROM `subyears` sy
  JOIN `submodels` sm
  ON sy.submodel_id=sm.id
  ORDER BY sm.model_id
");
如果您确实坚持在查询之外执行此操作,则需要创建一个全新的数组:

$arr = array();
foreach($arr_years as $year)
  foreach($arr_submodels as $submodel)
    if($year->submodel_id == $submodel->id)
      $arr[] = (object) array_merge((array) $year, (array) $submodel));
现在,$arr包含合并在一起的两个数组中的所有对象,其中子模型_id==id。您可以循环使用$arr并执行所需操作


我使用了array_merge,因为我不知道有任何函数可以合并对象。如果有问题,它会更有效。

请阅读并相应地编辑您的问题。您还应该包括示例数据、预期结果以及当前得到的结果。当你不知道数据集看起来像什么,或者预期结果应该是什么,或者你目前得到的是什么时,很难给出建议。我添加了数据看起来像什么,预期结果将是一个年的过滤数组…最终目标是从子模型id匹配的年份表中获得一个逗号分隔的年份列表。我在sql中不这样做的原因是我需要从年份表中为每个子模型id创建一个逗号分隔的年份列表…我可以循环并查询数据库每次都这样做,但我觉得额外的数据库访问会很昂贵。数据库是什么?MySQL?如果是这样的话,你需要小组讨论。显示问题中的数据和所需输出。指示数据库(如果不是MySQL)。所有这些都有一种方法可以将多个值连接到一个group by子句中。是的,它是MySQL…我现在正在显示问题中的数据,我不知道group by子句和连接,我将研究它。谢谢,我根据您的示例更改了表格的顺序,使其按我所希望的方式工作,但小组的工作非常有魅力,每天都要学习新的东西。