2017-02-15 5 views
0

私はこれを運のない過去の日にしようとしています。最後に、私は悪いハックでそれを行い、それを正しく行う方法が好きです。PHPを使用した多次元配列検索の正しいキーを取得

そのために、私は次のコード

を使用しています私は、私は、アレイ内の各列の日付で検索する必要があり、以下の構造

(
    [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を返してくれましたが、私にはその姿勢を返すようです。 $value = '2017-02-09'ため、たとえばそれはいつも私に1代わりの19

を返しますので、私はどのようにarray_seach作品を理解していないだけということはありますか私は内部の検索の結果として19を得ることができますどのような方法があります右方向への任意のチップが理解されるであろうforeach

+0

私が思う、あなたのために例 '$ key'は同じ値の' 2017-02-09'の2つの日付があるので配列でなければなりません – 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

それはfirsを返します私はforeach内でそれを呼び出すので、私はそれぞれ1と9になると予想しますが、私は常に1と1を得ます。 – JordanBelf

関連する問題