多维关联数组中的PHP array_filter

时间:2019-03-18 06:23:05

标签: php arrays multidimensional-array associative-array array-filter

我需要通过在多维数组的同一数组中搜索另一个值来找到键的值。

这是给定的数组:

<?php 

$users = array(

    "userA" => array(
                "email" => "userA@email.com",
                "language" => "en",
            ),

    "userB" => array(
                "email" => "userB@email.com",
                "language" => "de",
            ),

    "userC" => array(
                "email" => "userC@email.com",
                "language" => "it",
            ),

);

?>

示例: 我想输入...

$lang = 'de';

...并获取同一项目的“电子邮件”值。因此,在这种情况下,它应该输出:

userB@email.com

语言是唯一的,因此只有一种可能的匹配。

如果已经问过这个问题,我表示歉意,但找不到任何具有该结构和搜索条件的东西。

谢谢。

3 个答案:

答案 0 :(得分:1)

您可以为此使用array_column()-

// Generate array with language as key
$new = array_column($users, 'email', 'language');
// access array value (email) by language
echo $new['de'];

输出

userB@email.com

答案 1 :(得分:0)

使用array_filter可能很难实现,但是您可以查看其他替代方法,例如foreach循环和array_push

$filtered = [];

foreach($users as $key => $value) {
    if($value['language'] == 'de') {
        array_push($filtered, [$key => $value]);
    }
}

请参见array_filter with assoc array?

答案 2 :(得分:0)

有一种递归方法可以实现这一目标,

function recursive_array_search($needle,$haystack) {
    foreach($haystack as $key=>$value) {
        $current_key=$key;
        if($needle===$value OR (is_array($value) && recursive_array_search($needle,$value) !== false)) {
            return $current_key;
        }
    }
    return false;
}
// searching 'de' and getting all array or specific value by key. Its multipurpose method.
$temp = $users[recursive_array_search('de', $users)]['email']; 
print_r($temp);

引用Link

Demo