繁体   English   中英

多维关联数组中的PHP array_filter

[英]PHP array_filter in multidimensional associative array

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

这是给定的数组:

<?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

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

如果这可能已经被问到,我很抱歉,但我找不到任何具有该结构和此搜索条件的内容。

提前致谢。

您可以为此使用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

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

$filtered = [];

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

请参阅带有关联数组的 array_filter?

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

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

参考链接

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM