2016-11-04 431 views
3

我在Google上搜索了很多,但是我没有找到答案(或者我不明白)。array_search具有多值的多维数组

这是我的问题: 我想在条件中搜索具有两个值的多维数组中的键。

我知道如何在mutlidim阵列搜索与一个条件:

$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为colunm journee,它会返回0.

我想在搜索条件中添加pseudo

用简单的函数可以吗?
或者我必须使用array_keys()?提前(是否与multidim阵列工作?)

感谢您的帮助,

问候。

+0

随着一个SIM卡ple功能是不可能的。与组合 - 它是。 –

+0

所以你想在json中使用两种条件进行搜索匹配,'journee'和'pseudo'? –

回答

3

只有一个简单的功能是不可能的。

下面是与的解决方案:

$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

即使他在第一场比赛后不需要休息,一个简单的循环会更好。所以答案被简化为_使用简单的循环_ =) –

+0

解释为什么简单循环更好。 –

+0

1)循环更具可读性,2)循环是单个构造,而前一个解决方案使用lambda和两个函数调用,全部都加入到一个复杂的表达式中;因此,循环应该更有效 –