PHP - 根据另一个参数的值获取多维数组的值

7 浏览
0 Comments

PHP - 根据另一个参数的值获取多维数组的值

假设我有这个数组:

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_email等于'a@a.com',我需要'name'值,即'a'。

在php中是否可能实现?

0
0 Comments

问题的出现原因:这个问题的目标是通过最少的迭代次数进行数组搜索,并保证数组永远不可能超过一个完整的迭代(即O(n))。然而,一些答案在开始搜索之前使用array_column()(或经典的循环)对数据进行了准备,这已经使得它们不符合高效的技术标准。最高效的技术是迭代数组并使用早期的break语句。array_search()在内部使用了早期的break语句,但不幸的是,它需要先调整数据结构。使用任何函数迭代器都无法使用早期的break语句,所以它们也可以被排除在外。经典的循环是最适合的选择,通过条件的break语句,代码片段只会迭代到找到匹配项为止。

解决方法:使用经典的循环来迭代数组,并通过条件的break语句来提前结束循环,从而实现对多维数组的值进行搜索。以下是一个示例代码,展示了如何通过迭代数组来获取满足条件的值:

$array = [
    ['email' => 'a.com', 'name' => 'a'],
    ['email' => 'b.com', 'name' => 'b'],
];
$needle = 'a.com';
$name = null;
foreach ($array as $row) {
    if ($row['email'] === $needle) {
        $name = $row['name'];
        break;
    }
}
var_export($name);

输出结果为:'a'

通过以上代码,我们可以看到在迭代数组过程中,只有在找到匹配项时才会赋值给$name,并使用break语句提前结束循环,从而避免了不必要的迭代操作,实现了高效的多维数组值的获取。

0
0 Comments

问题的原因是需要根据一个参数的值来获取多维数组中的另一个参数的值。解决方法是使用PHP的array_column函数,该函数可以根据指定的键名从一个多维数组中返回指定的列。

下面是解决方法的示例代码:

$user_email="a.com";
$result=array_column($array,"name","email");
if(isset($result[$user_email])){
    echo "Name is: ".$result[$user_email];//Name is: a
}

如果执行print_r($result),将会输出以下结果:

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

通过使用array_column函数,我们可以直接从数组中获取到我们需要的数据,而不需要遍历整个数组来查找匹配的值。这样可以大大减少搜索数据所需的工作量。

0
0 Comments

问题的原因是需要根据一个多维数组中的某个值来获取另一个多维数组中对应的值。解决方法是使用PHP中的array_column函数来创建一个运行时数组,该数组保留了原始数组中的顺序。通过从这个数组中读取索引,可以引用原始数组中的值。

具体的解决方法是先使用array_column函数获取到包含所有'email'值的数组,然后使用array_search函数在这个数组中查找与目标值匹配的索引。如果找到了索引,就可以通过这个索引在原始数组中获取到对应的'name'值。

以下是代码示例:

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

这段代码首先使用array_column函数从$array数组中提取出所有的'email'值,然后使用array_search函数在这个数组中查找与$user->user_email匹配的值。如果找到了值,array_search函数会返回对应的索引。然后通过这个索引,可以在原始的$array数组中获取到对应的'name'值,并赋给$name变量。

这样就实现了根据一个多维数组中的某个值来获取另一个多维数组中对应的值。

0