2017-02-15 98 views
0

我一直試圖讓這個工作在過去的一天,沒有運氣。最後,我做了一個糟糕的黑客攻擊,並希望如何做到這一點。使用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

回答

2

可以使用一個嵌套循環所有的日期值相匹配的數組的按鍵附加。

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

對於您的示例數組,這將導致$keys = [1, 9]

1

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