我需要通过在多维数组的同一数组中搜索另一个值来找到键的值。
这是给定的数组:
<?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
语言是唯一的,因此只有一种可能的匹配。
如果已经问过这个问题,我表示歉意,但找不到任何具有该结构和搜索条件的东西。
谢谢。
答案 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]);
}
}
答案 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)