Search in Array

戏子无情 提交于 2020-01-14 04:38:05

问题


I have an array like this:

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

I would like to list the student names or array keys where gender is 2.

What is the most efficient way to achieve this?

Avoiding foreach should be better.


回答1:


You could use array_filter to filter the array.

$students = array_filter($students, function($var) {
    return $var['gender'] === 2;
});

And if you want to collect the names as an array, there is array_map:

$names = array_map(function($var) {
    return $var['student_name'];
}, $students);



回答2:


For this sort of operation, it's generally a good idea to use a filter:

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

array_filter(check_gender, $the_array);

Keep in mind that anonymous functions are only available from PHP 5.3 on. If you need your code to run on an older version of PHP, you'll need to declare the function first, like in the code above. If you're sure your code will only ever need to run on PHP 5.3 or newer, you can directly place an anonymous function as an argument of array_filter.




回答3:


A simple foreach would do..

$searchKey = 2;
foreach($yourarray as $k=>$arr)
{
 if($arr['gender']==$searchKey)
 {
   echo $arr['student_name']."<br>";
 }
}

Demo

One-liner array_map()

As you mentioned you are avoiding a foreach . This function still uses internal loop structures which is hidden. You should probably use the foreach instead as it is easily - readable.

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

Demo




回答4:


Assuming the array is unsorted, the best you can do is a simple loop through the array and check each key. Since the array is unsorted, you'll need to check every gender field.




回答5:


Try this

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

array_filter(check_gender, $the_array);


来源:https://stackoverflow.com/questions/22523303/search-in-array

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!