在数组中搜索

时间:2014-03-20 04:08:21

标签: php arrays search

我有一个这样的数组:

[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
)

我想列出gender2的学生姓名或数组键。

实现这一目标的最有效方法是什么?

避免使用foreach应该会更好。

5 个答案:

答案 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>";
 }
}

Demo

单行array_map()

如你所说,你正在避免foreach。此函数仍使用隐藏的内部循环结构。您可能应该使用foreach,因为它很容易阅读。

$searchKey=2;
array_map(function($v) use($searchKey) {  if($v['gender']==$searchKey){ echo $v['student_name']."<br>";}}, $yourarray);

Demo

答案 3 :(得分:1)

假设数组未排序,您可以做的最好的是通过数组的简单循环并检查每个键。由于数组未排序,因此您需要检查每个性别字段。

答案 4 :(得分:0)

试试这个

function check_gender($element) {
  return $element['gender'] === gender[2];
}

array_filter(check_gender, $the_array);