• 19-12-2018, 02:42:48
    #1
    Arkadaşlar aşağıdaki gibi bir fonksiyonum var burada sisteme kayıtlı takımların maçlarını otomatik şekilde oluşturuyorum fakat ya ilk gün tüm maçları ev sahibi yapıyor ya da ufak bir oynama yapiyorum misafir takım yapıyor
    Bunu daha düzgün bir şekilde nasıl oluşturabilirim.

    foreach ($takimlar as $key => $takim) {
    $rakipp = $db->query("SELECT * FROM takimlar")->select();
    $mac_oynama_tarih = $tarih;
    foreach ($rakipp as $key => $rakip) {
    if( $takim['takim_id'] != $rakip['takim_id'] ){
    $mac_olustur = $db->query("INSERT INTO maclar SET
    mac_takim_1=?,
    mac_takim_2=?,
    mac_oynama_tarih=?,
    mac_tarih=?
    ")->arr(array(
    $takim['takim_id'],
    $rakip['takim_id'],
    $mac_oynama_tarih,
    $tarih
    ))->insert();
    
    }
    $mac_oynama_tarih = $mac_oynama_tarih+86400;
    }
    }
  • 19-12-2018, 17:03:05
    #2
    daha düzgünden kastınız yada probleminizi tam olarak anlamadım da
    şu sorguyu
    $rakipp = $db->query("SELECT * FROM takimlar")->select();
    foreach dışında alın her seferinde tüm takımları getirmenize gerek yok
    foreach den önce bir kere getirip devamlı onu kullansanız yeterli
  • 19-12-2018, 18:23:29
    #3
    trgino adlı üyeden alıntı: mesajı görüntüle
    daha düzgünden kastınız yada probleminizi tam olarak anlamadım da
    şu sorguyu
    $rakipp = $db->query("SELECT * FROM takimlar")->select();
    foreach dışında alın her seferinde tüm takımları getirmenize gerek yok
    foreach den önce bir kere getirip devamlı onu kullansanız yeterli
    Hocam benim istediğim şuanda süper lig de olduğu gibi bir fikstür çıkartmak. Takımları oluşturdum, maçları da oluşturuyorum. Fakat bu maçların tarihlerini filan belirlerken fikstür şeklinde yapamıyorum.
  • 19-12-2018, 20:19:24
    #4
    Önerim; takımları 2 kez çekerek 2 ayrı diziye atın. Önce çektiğiniz takımları karmak için shuffle(); fonksiyonunu kullanarak takımları rasgele sıralayın. Karma işlemi bittikten sonra iç içe döngü kullanın. Aşağıda basit bir örnekle belirteyim.

    $takimlar = shuffle(dizi halinde veritabanında çekilmiş takımlar); // veritabanındaki takımlar
    $rakipler = shuffle(dizi halinde veritabanında çekilmiş takımlar); // veritabanındaki takımlar
    
    foreach($takimlar as $takim){
    
     // Rakip takım için döngü
     foreach($rakipler as $rakip){
        if($takim!=$rakip){
         $tarih = // maç tarihi
         $evsahibi = $takim;
         $rakiptakim = $rakip;
          // Veritabanına maçı kaydedeceğiniz sorgu.
        }
     }
     
    }
    Aklıma daha basit bir yöntem gelmedi. Yazdığım kodları denemedim de. Hata varsa düzeltirsiniz çalışırsa bilgilendirirseniz sevinirim. Tarih olayıyla ilgili önerimde şöyle; şimdiki tarihe sürekli +7 gün(veya kaç gün aralıklarla maç yapılacaksa) ekleterek ilerleyebilirsiniz.


    @PhYtOnX
    Edit: Aşağıya çalışan bir yapı koyuyorum. Bunu localde çalıştırıp, deneyip geliştirin isterseniz.

    <?php
    $teams = array("Galatasaray", "Fenerbahçe", "Beşiktaş", "Trabzon");
    shuffle($teams);
    $takimlar = $teams;
    shuffle($teams);
    $rakipler = $teams;
        foreach($takimlar as $takim){
            echo "<br>======[".$takim."]======<br>";
            foreach($rakipler as $rakip){
                if($takim != $rakip){
                    echo $takim." vs ".$rakip."<br>";
                }
            }
            echo "=========================";
        }
    ?>
  • 19-12-2018, 23:20:37
    #5
    strawz adlı üyeden alıntı: mesajı görüntüle
    Önerim; takımları 2 kez çekerek 2 ayrı diziye atın. Önce çektiğiniz takımları karmak için shuffle(); fonksiyonunu kullanarak takımları rasgele sıralayın. Karma işlemi bittikten sonra iç içe döngü kullanın. Aşağıda basit bir örnekle belirteyim.

    $takimlar = shuffle(dizi halinde veritabanında çekilmiş takımlar); // veritabanındaki takımlar
    $rakipler = shuffle(dizi halinde veritabanında çekilmiş takımlar); // veritabanındaki takımlar
    
    foreach($takimlar as $takim){
    
     // Rakip takım için döngü
     foreach($rakipler as $rakip){
        if($takim!=$rakip){
         $tarih = // maç tarihi
         $evsahibi = $takim;
         $rakiptakim = $rakip;
          // Veritabanına maçı kaydedeceğiniz sorgu.
        }
     }
     
    }
    Aklıma daha basit bir yöntem gelmedi. Yazdığım kodları denemedim de. Hata varsa düzeltirsiniz çalışırsa bilgilendirirseniz sevinirim. Tarih olayıyla ilgili önerimde şöyle; şimdiki tarihe sürekli +7 gün(veya kaç gün aralıklarla maç yapılacaksa) ekleterek ilerleyebilirsiniz.


    @PhYtOnX
    Edit: Aşağıya çalışan bir yapı koyuyorum. Bunu localde çalıştırıp, deneyip geliştirin isterseniz.

    <?php
    $teams = array("Galatasaray", "Fenerbahçe", "Beşiktaş", "Trabzon");
    shuffle($teams);
    $takimlar = $teams;
    shuffle($teams);
    $rakipler = $teams;
        foreach($takimlar as $takim){
            echo "<br>======[".$takim."]======<br>";
            foreach($rakipler as $rakip){
                if($takim != $rakip){
                    echo $takim." vs ".$rakip."<br>";
                }
            }
            echo "=========================";
        }
    ?>
    Hocam yardımların için teşekkürler ama işime yaramadılar... Yabancı kaynaklarda araştırırken buldum çözümü
    https://stackoverflow.com/questions/...tball-schedule
    adamlar burada yapmışlar kendime uyarladım biraz oynayarak tam oldu
  • 19-12-2018, 23:58:47
    #6
    Çözüldüğüne sevindim. Yabancı kaynaklar her zaman daha fazla bilgi içeriyor. Vaktim olsaydı bende araştırıp yabancı kaynaklardan alıntı yapıcaktım.