从PHP数组中获取特定元素


Getting a particular element from a PHP array?

我的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变量。