使用PHP搜索multidimensioanl数组时搜索正确的密钥

问题描述:

我一直试图让这个工作在过去的一天,没有运气。最后,我做了一个糟糕的黑客攻击,并希望如何做到这一点。使用PHP搜索multidimensioanl数组时搜索正确的密钥

我需要找到具有下列结构

(
    [2] => Array 
     (
      [0] => Array 
       (
        [total] => 52 
        [date] => 2017-02-08 
        [nickname] => AAAA 
       ) 

      [1] => Array 
       (
        [total] => 53 
        [date] => 2017-02-09 
        [nickname] => AAAA 
       ) 


     ) 

    [3] => Array 
     (
      [8] => Array 
       (
        [total] => 11 
        [date] => 2017-02-08 
        [nickname] => XXXX 
       ) 

      [9] => Array 
       (
        [total] => 14 
        [date] => 2017-02-09 
        [nickname] => XXXX 
       ) 


     ) 

) 

我需要日期为阵列内部的每个阵列搜索阵列中的搜索键时,我使用下面的代码

$key = array_search($value, array_column($sales, 'date')); 

其中的一个foreach循环大阵。

问题我的是$key而不是返回我的id它似乎是返回我的位置。因此,例如用于$value = '2017-02-09'后总是回到我1而不是19

难道只是我不明白array_seach工作或者有没有什么办法,我可以得到19 AS内部的搜索结果所述foreach

在正确的方向的任何尖端将理解的,

+0

我想,你的示例'$ key'应该是一个数组,因为有两个具有相同值的日期'2017-02-09' – RomanPerekhrest

可以使用一个嵌套循环所有的日期值相匹配的数组的按键附加。

foreach ($your_array as $set) { 
    foreach ($set as $key => $item) { 
     if ($item['date'] == $value) $keys[] = $key; 
    } 
} 

对于您的示例数组,这将导致$keys = [1, 9]

array_search - 搜索数组给定值,并返回使用The RecursiveIteratorIterator class的 第一对应的按键如果成功

解决办法:

$keys = []; 
$value = '2017-02-09'; 
$it = new \RecursiveIteratorIterator(new \RecursiveArrayIterator($data), \RecursiveIteratorIterator::SELF_FIRST); 
foreach ($it as $k => $v) { 
    if (is_array($v) && isset($v['date']) && $v['date'] == $value) { 
     $keys[] = $k; 
    } 
} 
+0

它返回冷杉t相应的键,但我在foreach中调用它,所以我期望分别为1和9,但我总是得到1和1。 – JordanBelf