在二维数组的行上实现 array_search() 功能,同时需要在一行中进行多个关联匹配

问题描述 投票:0回答:2

我想在条件中有两个值的多维数组中搜索键。

我知道如何用单个搜索条件搜索多维数组:

$key = array_search($journee, array_column($data,'journee'));

但仅此而已。这是我的阵列设置:

Array
(
    [0] => Array
        (
            [pseudo] => titi
            [journee] => 11
            [pts] => 3
        )

    ...
    [10] => Array
        (
            [pseudo] => test
            [journee] => 10
            [pts] => 6
        )

    [11] => Array
        (
            [pseudo] => test
            [journee] => 11
            [pts] => 4
        )

)

如果我只将

11
放入
array_search
中,对于
array_column
journee
,它将返回0。

我也想在搜索条件中添加

pseudo
(应该搜索键
journee
pseudo
来搜索特定值)。

我该如何实现这个目标?

php arrays multidimensional-array filtering associative
2个回答
8
投票

仅用一个简单的功能是不可能的。

这是一个使用 two 的解决方案:

$search = ['pseudo' => 'test', 'journee' => 10];
$keys = array_keys(
    array_filter(
        $array,
        function ($v) use ($search) { return $v['pseudo'] == $search['pseudo'] && $v['journee'] == $search['journee']; }
    )
);
$key = $keys[0];

但是,如果您只需要找到一个键,我建议使用

foreach
break
,因为您不必迭代所有值数组(使用
array_filter
会发生什么)并立即停止当找到某些数据时:

$key = false;
$search = ['pseudo' => 'test', 'journee' => 10];
foreach ($array as $k => $v) {
    if ($v['pseudo'] == $search['pseudo'] && $v['journee'] == $search['journee']) {
        $key = $k;
        // key found - break the loop
        break;
    }
}

0
投票

要享受有条件停止循环的效率,同时将变量限制在全局范围之外,请使用立即调用函数表达式。可以使用

array_diff_assoc()
来识别合格行,以检查搜索数组中的所有关联元素是否在给定行中匹配。 演示

$search = ['pseudo' => 'test', 'journee' => 10];

var_export(
    (function($haystack, $needle) {
        foreach ($haystack as $i => $row) {
            if (!array_diff_assoc($needle, $row)) {
                return $i;
            }
        }
        return null;
    })($array, $search)
);
// output: 10
© www.soinside.com 2019 - 2024. All rights reserved.