2017-01-16 6 views
-1

に私は私の出力には次の配列持ちPHPのforeach + ..私は二つのパラメータに基づいて、foreachループの配列をフィルタリングする方法を探しています多次元配列

に動作していない継続:

[ 
    { 
    "entry_id": "1", 
    "title": "something", 
    "grades": [ 
     "3", 
     "4", 
     "5", 
     "6" 
    ], 
    "subject": [ 
     "science" 
    ] 
    }, 
    { 
    "entry_id": "2", 
    "title": "something else", 
    "grades": [ 
     "7", 
     "8", 
     "9", 
     "10" 
    ], 
    "subject": [ 
     "math" 
    ] 
    }, 
] 

私は、これは動作するはずのようにそれはそう読んだから、唯一たentry_id 2 + breakforeachを使用して返すようにしようとしている。..

$subject = 'math'; 
$grade = '10'; 

foreach ($results as $key => &$result) { 
     if($subject && !in_array($subject, $result['subject'])){ 
      break; 
     } 
     if($grade && !in_array($grade, $result['grades'])){ 
      break; 
     } 
} 

しかし、それはですすべてのエントリを返します。

+1

あなたはそれが何を返すか、 'return'文を持っていないのですか? – Barmar

+0

'continue'はループ本体の残りの部分をスキップし、ループの次の繰り返しに進むことを意味します。しかし、あなたはループ本体に何も持っていないので、何の効果もありません。 – Barmar

+0

ループを停止したい場合は、 'break'を使います。 – Barmar

答えて

0

現在のエントリを新しい配列に追加して、いずれかのテストに合格する必要があるようです。したがって、!in_array()テストをin_array()に変更し、ブロック内の結果に追加してください。ifいくつかのより多くを検索した後

$realresults = array(); 
foreach ($results as $key => &$result) { 
    if($subject && in_array($subject, $result['subject'])){ 
     $realresults[] = $result; 
    } elseif($grade && in_array($grade, $result['grades'])){ 
     $realresults[] = $result; 
    } 
} 
+0

Yep - これを試してみましたが、最初のパラメータに対してのみ動作します.2番目(この場合はグレード)の結果をさらにフィルタリングしようとすると動作しません。 -/ –

+0

両方のパラメータに一致する結果しか保持しません。どちらの基準にも一致する結果を保持しますか? – Barmar

+0

はい、いずれかの基準によって...しかし、私は彼らがあまりにも優先的になると思いますか?私が最初に科目別にフィルタリングしたように、最初に学年のように他の方法でフィルタリングした場合と同じくらい多くの結果が得られないかもしれません。ですから、私の好みは最初に科目となります... –

0

が未設定の+のarray_valuesは私が必要なものを行いますように思える:

foreach ($results as $key => &$result) { 
    if($subject && !in_array($subject, $result['subject'])){ 
     unset($results[$key]); 
     $results = array_values($results); 
    } 
    if($grade && !in_array($grade, $result['grades'])){ 
     unset($results[$key]); 
     $results = array_values($results); 
    } 
} 
関連する問題