我有一个这样的数组:
[0] => Array(
[student_id] => 6
[gender] => 1
[student_name] => name1
)
[1] => Array(
[student_id] => 26
[gender] => 2
[student_name] => name2
)
[2] => Array(
[student_id] => 75
[gender] => 2
[student_name] => name3
)
[3] => Array(
[student_id] => 1
[gender] => 1
[student_name] => name4
)
[4] => Array(
[student_id] => 10
[gender] => 1
[student_name] => name5
)
我想列出gender
为2
的学生姓名或数组键。
实现这一目标的最有效方法是什么?
避免使用foreach应该会更好。
答案 0 :(得分:4)
您可以使用 array_filter 来过滤数组。
$students = array_filter($students, function($var) {
return $var['gender'] === 2;
});
如果您想将名称收集为数组,则 array_map :
$names = array_map(function($var) {
return $var['student_name'];
}, $students);
答案 1 :(得分:3)
对于这种操作,使用过滤器通常是一个好主意:
function check_gender($element) {
return $element['gender'] === 2;
}
array_filter(check_gender, $the_array);
请记住,匿名函数仅适用于PHP 5.3。如果您需要在旧版本的PHP上运行代码,则需要首先声明该函数,就像上面的代码一样。如果您确定您的代码只需要在PHP 5.3或更高版本上运行,您可以直接将匿名函数作为array_filter
的参数。
答案 2 :(得分:2)
一个简单的foreach
会做..
$searchKey = 2;
foreach($yourarray as $k=>$arr)
{
if($arr['gender']==$searchKey)
{
echo $arr['student_name']."<br>";
}
}
array_map()
如你所说,你正在避免foreach
。此函数仍使用隐藏的内部循环结构。您可能应该使用foreach
,因为它很容易阅读。
$searchKey=2;
array_map(function($v) use($searchKey) { if($v['gender']==$searchKey){ echo $v['student_name']."<br>";}}, $yourarray);
答案 3 :(得分:1)
假设数组未排序,您可以做的最好的是通过数组的简单循环并检查每个键。由于数组未排序,因此您需要检查每个性别字段。
答案 4 :(得分:0)
试试这个
function check_gender($element) {
return $element['gender'] === gender[2];
}
array_filter(check_gender, $the_array);