【发布时间】:2021-05-29 08:48:17
【问题描述】:
我正在尝试过滤满足两个条件的二维数组。但是,它没有按预期工作。我发现错误在array_intersect() 函数中。为什么array_intersect() 在这里不能正常工作。有没有另一种方法可以在没有迭代的情况下做到这一点。
<?php
error_reporting(0);
$students = [
["name"=> 'k. l.james', "grade"=>8],
["name"=> 'k. l.james', "grade"=>9],
["name"=> 'e. musk', "grade"=>8],
["name"=> 'jone', "grade"=>9],
];
function filterByGrade($grade){
global $students ;
if (empty($grade)){
return $students ;
}else{
return array_filter($students , function($record) use($grade){
return ($record['grade'] == $grade);
});
}
}
function filterByName($name){
global $students;
if (empty($name)){
return $students;
}else{
return array_filter($students, function($record) use($name){
return (strcasecmp(str_replace(' ','',$record['name']),str_replace(' ','',$name)) == 0);
});
}
}
print_r(filterByGrade(8));
echo "<br/>";
print_r(filterByName('k.l.james'));
echo '<br/>';
print_r(array_intersect(filterByGrade(8), filterByName('k.l.james')));
?>
结果是;
Array ( [0] => Array ( [name] => k. l.james [grade] => 8 ) [2] => Array ( [name] => e. musk [grade] => 8 ) )
Array ( [0] => Array ( [name] => k. l.james [grade] => 8 ) [1] => Array ( [name] => k. l.james [grade] => 9 ) )
Array ( [0] => Array ( [name] => k. l.james [grade] => 8 ) [2] => Array ( [name] => e. musk [grade] => 8 ) )
我希望结果的最后一行是,
Array ( [0] => Array ( [name] => k. l.james [grade] => 8 ))
如果我将array_intersect()中的两个数组如下互换,结果是不同的。
print_r(array_intersect(filterByName('k.l.james'),filterByGrade(8)));
然后,我得到如下结果。
Array ( [0] => Array ( [name] => k. l.james [grade] => 8 ) [2] => Array ( [name] => e. musk [grade] => 8 ) )
Array ( [0] => Array ( [name] => k. l.james [grade] => 8 ) [1] => Array ( [name] => k. l.james [grade] => 9 ) )
Array ( [0] => Array ( [name] => k. l.james [grade] => 8 ) [1] => Array ( [name] => k. l.james [grade] => 9 ) )
我注意到,尽管考虑了两个数组的交集,但仅打印了 array_intersect() 中的第一个过滤数组。
【问题讨论】:
-
注意:字符串 "k.l.james" 在初始数组中定义为 "k.l.james"。
标签: php arrays multidimensional-array array-intersect