【问题标题】:Use array_filter() or array_intersect() to filter 2-dimensional array by one column using a 1-dimensional array使用 array_filter 或 array_intersect 通过匹配值来过滤使用另一个数组值的数组
【发布时间】:2021-12-28 18:15:06
【问题描述】:

我试图通过第二个数组值过滤第一个数组。例如,我可能想过滤每个年龄为 22、25、35、40 的人。我将这些值存储在 $2 中

$a1 = array(['name'  => 'mike', 
            'age' => 18],
           ['name'  => 'james', 
            'age' => 22],
            ['name'  => 'sarah', 
            'age' => 35],
            ['name'  => 'ken', 
            'age' => 29],);
            
            
$a2 = array(22, 25 , 35 , 40);

$results = array_intersect($a2, $a1['age']);
var_dump($results) ; 

这个数组应该返回 22、35,因为它只找到了 2 个与 $a2 中的年龄匹配

 array(['name'  => 'james', 
        'age' => 22],
       ['name'  => 'sarah', 
        'age' => 35]);
            

【问题讨论】:

  • 使用array_filter
  • 我试过了,怎么样?
  • array_filter($a1, function($x) use($a2) { return in_array($x["age"], $a2); };
  • 干得好。就像魔术一样...希望我可以将其标记为已解决,谢谢

标签: php arrays filter


【解决方案1】:

array_intersect 和 array_diff 不适用于多维数组。

试试这个,看看效果如何:

$a = [1,2,3,4];
$b = [2,7,8,9];
var_dump(array_intersect($a,$b)); 

结果应该是 [2]。 如果您使用多维数组并且您只对一列数组感兴趣,那么首先:

$age = array_column($a1,'age');

然后

var_dump(array_intersect($age,$a2));

【讨论】:

  • 我需要数组的完整索引,所以我也需要人名。
猜你喜欢
  • 1970-01-01
  • 2020-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-15
  • 1970-01-01
  • 2018-12-12
  • 1970-01-01
相关资源
最近更新 更多