我的PHP代码中有一个数组,如下所示:
Array
(
[1] => Array
(
[subject_id] => 1
[subject] => Math
[default_selection] => 1
)
[2] => Array
(
[subject_id] => 2
[subject] => Physics
[default_selection] => 0
)
[3] => Array
(
[subject_id] => 3
[subject] => Chemistry
[default_selection] => 0
)
[4] => Array
(
[subject_id] => 4
[subject] => Biology
[default_selection] => 0
)
[5] => Array
(
[subject_id] => 5
[subject] => Statistics
[default_selection] => 0
)
)
我想得到[subject]的值,其中[subject_id]=2。在PHP中有没有直接/快捷方式可以做到这一点,或者我需要运行foreach循环?
如果只需要对同一数据执行一次,只需运行foreach
循环:
<?php
$foundArray = null;
foreach ($array as $subArray) {
if ($subArray['subject_id'] == 2) {
$foundArray = $subArray;
break;
}
}
var_dump($foundArray);
?>
如果你需要用相同的数据(在相同的请求中)检查subject_id
的很多,你可以将你的密钥与subject_id
关联起来,并以这种方式引用它:
<?php
$assoc = array();
foreach ($array as $subArray) {
$assoc[$subArray['subject_id']] = $subArray;
}
var_dump($assoc[2]);
var_dump($assoc[3]);
var_dump($assoc[4]);
?>
您可以使用array_map
使用此功能:
function getSubject($subject) {
if ($subject['subject_id'] == 2) return $subject;
}
用法:
$subjects = array_map('getSubject', $array);
var_dump($subjects);
参考:从多维数组中获取特定的键值对
PHP 5.5中的新功能是array_column()
函数,它可能会满足您的要求(即不使用foreach()
进行搜索):
$searchForSubjectID = 2;
$index = array_search($searchForSubjectID, array_column($data, 'subject_id'));
$subject = $data[$index]['subject'];
print $subject; //prints 'Physics'
如果您还没有使用PHP 5.5,那么有一个用于此函数的兼容性库。
您可以使用array_filter来选择正确的元素:
<?php
function getSecondSubject( $element ){
return $element["subject_id"] == 2;
}
$only_subject_two = array_filter( $all_subjects, "getSecondSubject" );
$subject = $only_subject_two["subject"];
?>
如果需要的话,您可以使用一些技巧(比如变量)来生成您要查找的subject_id
变量。