PHP - 基于其他参数的值获取多维数组值
想象我有此数组:PHP - 基于其他参数的值获取多维数组值
Array
(
[0] => Array
(
[email] => [email protected]
[name] => a
)
[1] => Array
(
[email] => [email protected]
[name] => b
)
)
我使用此代码来检查,如果在这个多阵列存在我的邮箱:
in_array($user->user_email, array_column($array, 'email'))
现在,我的问题是:如何获取参数'name'的值,其中电子邮件与我的变量匹配。 所以,如果我的$用户> USER_EMAIL等于“[email protected]”我需要的名称值,这是“A”。 它可能在PHP?
试试这个:
$index = array_search($user->user_email, array_column($array, 'email'));
if ($index !== false) $name = $array[$index]['name'];
这依赖于运行时通过阵列蜜饯array_column
,我相信,在提取项目的顺序创建的事实。 Ergo,从这个数组读取的索引可以用来引用原始数组。
非但没有列,然后搜索该数组为您email
的。你可以这样做。 array_column
第二个参数定义了结果数组的关键字。此方法减少了数组中搜索数据的工作量。
$user_email="[email protected]";
$result=array_column($array,"name","email");
if(isset($result[$user_email])){
echo "Name is: ".$result[$user_email];//Name is: a
}
如果你print_r($result)
你会得到。
Array
(
[[email protected]] => a
[[email protected]] => b
)
这个应该是答案,它很整齐。 – Yarco
$name = "";
foreach($array as $key => $value)
{
if($value["email"] == $user->user_email)
{
$name = $array[$key]["name"];
}
}
'$ name = $ value ['name'];'更快,更清晰。之后你也可以放一个'break'。 – axiac
使用array_search
insted的的in_array
$array = [
[
'email' => '[email protected]',
'name' => 'a'
], [
'email' => '[email protected]',
'name' => 'b'
]
];
$index = array_search('[email protected]', array_column($array, 'email'));
// when there is no such value, $index will be equal 'false'
var_dump($index); // int(1)
试试这个;
$name = $array[array_keys(array_column($array, 'email'), $user->user_email)[0]]['name'];
PD:(此代码只得到搜索的第一个元素)
你可以做到这一点作为一个衬垫,但它不是很好,很难IMO阅读:
array_column($array, 'name')[($result = array_search('[email protected]', array_column($array, 'email'))) ?: (is_int($result)? $result : -1)];
同如上但格式化为可读性:
array_column($array, 'name')[
(
$result = array_search(
'[email protected]',
array_column($array, 'email')
)
)
?:
(
is_int($result)? $result : -1
)
];
这通过名称的阵列的-1,如果array_search
收率š假以避免不存在的邮件和[email protected]
两个归国a
由于false
被评价为0
。
这样,如果电子邮件地址不存在你会得到一个Undefined offset
通知,以便电子邮件实际上变成了名的数组的关键。
但一次。不大好。相反,考虑这样的功能:
function customArraySearch($array, $search_column, $search_value, $result_column) {
$result = array_search($search_value, array_column($array, $search_column));
if($result_key !== false) {
return array_column($array, $result_column)[$result_key]
}
return false;
}
customArraySearch($array, 'email', '[email protected]', 'name'); //a
customArraySearch($array, 'email', '[email protected]', 'name'); //false
使用['array_search()'](http://php.net/manual/en/function.array-search.php)或['array_keys()'] (http://php.net/manual/en/function.array-keys.php),而不是'in_array()'找到匹配的项目的位置(一个或多个)。 – axiac
感谢@axiac,array_search()正是我一直在寻找的。 –