PHP-基于另一个参数的值获取多维数组值

PHP-基于另一个参数的值获取多维数组值,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,假设我有这个数组: Array ( [0] => Array ( [email] => a@a.com [name] => a ) [1] => Array ( [email] => b@b.com [name] => b ) ) 我使用此代码检查此多数组中是否存在我的电子邮件: i

假设我有这个数组:

Array
(
    [0] => Array
        (
            [email] => a@a.com
            [name] => a
        )

    [1] => Array
        (
            [email] => b@b.com
            [name] => b
        )
)
我使用此代码检查此多数组中是否存在我的电子邮件:

in_array($user->user_email, array_column($array, 'email'))
现在,我的问题是:如何获取参数“name”的值,其中电子邮件与我的变量匹配。 因此,如果我的$user->user\u电子邮件等于'a@a.com'我需要名称值,即'a'。 在php中可能吗?

尝试以下方法:

$index = array_search($user->user_email, array_column($array, 'email'));
if ($index !== false) $name = $array[$index]['name'];
这取决于这样一个事实:我相信,
array\u column
创建的运行时数组保留了项目提取的顺序。因此,从该数组读取的索引可用于引用原始数组。

尝试以下操作:

$index = array_search($user->user_email, array_column($array, 'email'));
if ($index !== false) $name = $array[$index]['name'];

这取决于这样一个事实:我相信,
array\u column
创建的运行时数组保留了项目提取的顺序。因此,从该数组读取的索引可用于引用原始数组。

而不是获取列,然后在该数组中搜索您的
电子邮件。你可以这样做。第二个参数定义结果数组的键。此方法减少了在数组中搜索数据的工作量

如果您执行
打印($result)
操作,您将得到一个

Array
(
    [a@a.com] => a
    [b@b.com] => b
)

而不是获取列,然后在该数组中搜索您的
电子邮件
。你可以这样做。第二个参数定义结果数组的键。此方法减少了在数组中搜索数据的工作量

如果您执行
打印($result)
操作,您将得到一个

Array
(
    [a@a.com] => a
    [b@b.com] => b
)

使用
array\u search
代替数组中的

$array = [
    [
        'email' => 'a@a.com',
        'name' => 'a'
    ], [
        'email' => 'b@b.com',
        'name' => 'b'
    ]
];

$index = array_search('b@bc.com', array_column($array, 'email'));

// when there is no such value, $index will be equal 'false'
var_dump($index); // int(1)

使用
array\u search
代替数组中的

$array = [
    [
        'email' => 'a@a.com',
        'name' => 'a'
    ], [
        'email' => 'b@b.com',
        'name' => 'b'
    ]
];

$index = array_search('b@bc.com', 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:(此代码仅获取搜索的第一个元素)

试试这个

$name = $array[array_keys(array_column($array, 'email'), $user->user_email)[0]]['name'];

PD:(此代码仅获取搜索的第一个元素)

此任务在效率方面的目标是以最少的迭代次数执行数组搜索,并确保数组的迭代次数不可能超过一次(这是
n
中的一个大O)

本页上的任何答案,如果在开始搜索之前就使用
array\u column()

最有效的技术是迭代数组,目的是使用早期的
中断
array_search()
在引擎盖下使用了提前中断,但不幸的是,它需要先调整数据结构

使用任何函数迭代器都不能使用提前中断,因此它们也可以被打折

这是经典循环最合适的一次。使用条件中断,代码段的迭代次数永远不会超过查找匹配项所需的次数

代码:()

输出:

'a'

这项任务在效率方面的目标是以最少的迭代次数执行数组搜索,并确保数组的迭代次数不可能超过一次(这是
n
中的一个大O)

本页上的任何答案,如果在开始搜索之前就使用
array\u column()

最有效的技术是迭代数组,目的是使用早期的
中断
array_search()
在引擎盖下使用了提前中断,但不幸的是,它需要先调整数据结构

使用任何函数迭代器都不能使用提前中断,因此它们也可以被打折

这是经典循环最合适的一次。使用条件中断,代码段的迭代次数永远不会超过查找匹配项所需的次数

代码:()

输出:

'a'

$name=$value['name']更快更清晰。您还可以设置一个
中断在它之后。
$name=$value['name']更快更清晰。您还可以设置一个
中断在它之后。这个答案有一个大O的
2n
。这个答案有一个大O的
2n