Sorgunuz;
foreach($sorular_json as $sorularKey => $sorularVal){
foreach($soru_cevaplari_js as $soruCevapKey => $soruCevapVal){
if($soruCevapVal["questionId"] == $sorularVal["id"]){
echo "";
print_r($soruCevapVal);
print_r($sorularVal);
echo "
";
}else($soruCevapVal["questionId"] != $sorularVal["id"]){
echo "";
print_r($sorularVal);
echo "
";
// burada hepsini getiriyor ben sadece istediğim şey if ile eşleşeni getir else eşleşmeyenleri
// eşleşmeyenleri getiriyor ama hepsini getiriyor
}
}
}
Hocam sorunun kaynağı şu;
2 adet iç içe foreach'iniz var. 1. foreach sorular için soru adedi sayısı kadar dönüyor(örneğin 3 sorunuz olsun)
1. foreach ilk soru için döngünün içine girdiğinde 2. foreach'iniz çalışıyor, orada da 2 cevabınız olduğunu varsayalım ve ilk soruyla ilk cevap arrayleri aynı olsun. Bu durumda if koşuluna girip soru ve cevabı eşleşip listeliyor. Ama bu noktada 2. foreach henüz döngüsünü tamamlamadığı için, 2. cevap için karşılaştırmayı yapıyor. Burada 2. cevap için yaptığında 1. soruyla 2. cevap eşit olmadığı için else koşuluna giriyor ve bu sefer else içindeki gösterimi yapıyor. Bu böyle üstteki for tüm değerleri için döngüsünü tamamlayana kadar devam ediyor. Haliyle istemediğiniz bir görüntü alıyorsunuz.
Burada çözüm şu olabilir. If içerisinde eşleşme olursa döngüyü break; yaparak kırarsanız, artık diğer cevaplar için bakmasına gerek kalmayacağını anlar. Ama bu yine sorunuzu çözmez çünkü 2. foreach içerisinde indexi 2 olan cevap eşleşecekse ilk ikisi için else koşuluna girip bu sefer eşleşmediğini varsayıp çalışmış olacak.
Benim size önerim şu olur; else kısmını döngünüzden kaldırın, ve if 'in içine en sona bir break koyarak boş yere 2. foreach'in çalışıp memory kullanmasına engel olun. Burada döngü break ile kırılmamış ve flag 1 set edilemeden sona ulaşmışsa eşleşmemiş olacağı için sorunuzu ekrana basın. Üstte anlattığım algoritmanın kod örneği;
foreach($sorular_json as $sorularKey => $sorularVal){
//eşleşme kontrolünü soru foreachinin her dönüşünün başında 0lıyoruz
$eslestiMi = 0;
foreach($soru_cevaplari_js as $soruCevapKey => $soruCevapVal){
if($soruCevapVal["questionId"] == $sorularVal["id"]){
echo "";
print_r($soruCevapVal);
print_r($sorularVal);
echo "
";
//eşleşme olduğu için flag'e 1 set edip 2. foreach'i break ile kırıyoruz
$eslestiMi = 1
break;
}
}
//şayet eşleşme olmamışsa değişkenimiz 0 kaldığı için soruyu ekrana basıyoruz
if($eslestiMi == 0)
{
echo "";
print_r($sorularVal);
echo "
";
}
}
Kodu çalıştırmadan direkt buradan yazdığım için unuttuğum syntax hataları olabilir ama mantık çalışacaktır.