• 01-09-2010, 21:15:08
    #1
    Arkadaşlar şimdi bir foreach döngüm var, diyelim 40 tane sonuç listeliyor.
    Ben bu 40 sonucu 20 - 20 iki ayrı bölüme nasıl ayırırım. Şimdi yapmak istediğimi söyliyeyim, belki daha da yardımcı olur, iki bölüm arasına reklam yerleştiricem.

    Bunu nasıl yaparız?

    ÖRN
    Hakan, Ali, Ahmet, Ayşe
    --- REKLAM ---
    Yusuf, Ümran, Semih, Yarkın


    bu şekilde nasıl yaparım?
  • 01-09-2010, 22:38:03
    #2
    Döngüye girmeden önce 0 yada 1 değerli bir değişken tanımla. Kaçtan başlamasını istiyosan. Döngü sonunda bir arttır onu. Sonrada yine döngü sonunda if($sayi == 20) { echo reklam kodları } şeklinde yaparsın.
  • 01-09-2010, 23:09:08
    #3
    Örnek kod alsam iyi olur.
    Dediğin mantıkla yapmaya çalıştım ve yapamadım
  • 01-09-2010, 23:21:23
    #4
    <?php
    $dizi = array("1a","2a","3a","4a","5a","6a","7a","8a","9a","10a","11a","12a","13a","14a","15a","16a","17a","18a","19a","20a","21a");
    foreach ( $dizi AS $anahtar => $yaz )
    {
        if ( ($anahtar%20) == 0 && $anahtar != 0) {
            echo "reklam<br>";
        }
        echo $anahtar." => ".$yaz."<br>";
    }
    ?>
    1000 verilik dizide de her 20 kayıttan sonra reklam koyar
    sadece 40 kayıt varsa
    <?php
    $dizi = array("1a","2a","3a","4a","5a","6a","7a","8a","9a","10a","11a","12a","13a","14a","15a","16a","17a","18a","19a","20a");
    foreach ( $dizi AS $anahtar => $yaz )
    {
        if ( $anahtar == 20 ) {
            echo "<b>reklam</b><br>";
        }
        echo $anahtar." => ".$yaz."<br>";
    }
    ?>
    bunuda kullanabilirsin.
  • 02-09-2010, 06:04:59
    #5
    Üyeliği durduruldu
    eğer foreach kullanıyorsan, dizi'nde kaç tane değer olduğunu döngüye girmeden önce count() ile bir değişkene aktar. sonra bu değeri 2 ye böl ve round() ile yuvarla. bu şekilde sadece 40 tane elemana sahip bir diziyi 20veri-reklam-20veri şeklinde değil dilediğin kadar key e sahip dizi yi dilediğin kadar parçaya bölebilirsin. mesela 100 elemanlı diziyi 10ar 10 ar yazdırıp aralarına reklam koyabilirsin. böylece scriptin esneklik kazanır.

    ondan sonraki iş Lost un dediği gibi; döngüden önce 0 değerine sahip bir değişken oluştur. reklamın bastırılacağı yerde bu değişkeni if kontrolüne sok.uyarsa reklamı bas, uymazsa devam et. döngünün sonunda da arttır. tabii benim anlattığım mantıkta; Cycl0ne un verdiği if kontrolü işe yaramaz. bunun için == yerine %% kullanmalısın.
  • 02-09-2010, 09:47:43
    #6
    yapım şöyle

    foreach ($sxml->entry AS $anahtar => $entry) {

    echo $anahtar; yapınca entry çıktısı veriyor ve 40 tane entry yazıyor ekranda...
  • 02-09-2010, 15:22:54
    #7
    Üyeliği durduruldu
    bekchi adlı üyeden alıntı: mesajı görüntüle
    yapım şöyle

    foreach ($sxml->entry AS $anahtar => $entry) {

    echo $anahtar; yapınca entry çıktısı veriyor ve 40 tane entry yazıyor ekranda...
    object den veri çekerken veya döndürürken dizi ve stringe dönüştürmek daha iyidir.

    ör:
    $sxml->entry['asdsa'] yerine (string)$sxml->entry['asdsa']
    misal $sxml->entry['asdsa'] değeri asdadad olsun. gettype fonksiyonu ile bakarsan string yerine object olabilir.

    $sxml->entry yerine (array)$sxml->entry

    $arr = (array)$sxml->entry;

    anahtarları sıfırlamak için array_values fonksiyonunu kullanabilirsin...

    kolay gelsin
  • 03-09-2010, 21:17:00
    #8
    $feedURL = "asdasd.xml";
    $sxml = @simplexml_load_file(($feedURL));
    foreach ($sxml->entry as $entry) {

    Şimdi benim kodlarım bu şekilde,
    Ben bu döngüde tam 40 tane sonuç var, 20. sonuçtan sonra reklam gelsin istiyorum.
    Şimdi daha açıklayıcı oldum sanırım. Dediklerinizin hiçbirinden sonuç alamıyorum. yardımcı olursanız sevinirim...
  • 03-09-2010, 21:34:05
    #9
    Üyeliği durduruldu
    ilk yöntemi arkadaşlar söymemiş $i gibi bir değişken tutup her döngüde arttırarak 20 yi bulunca ekrana istediğinizi yazdırabilirsiniz .

    bir diğer yöntem de diziyi bölmek.
    $feedURL = "asdasd.xml";
    $sxml = (array)@simplexml_load_file(($feedURL));
    
    $ilk_20 = array_splice($sxml,0,19);
    $kalanlar = array_splice($sxml,20,count($sxml));
    artyık elinizde 2 tane dizi var. ilkini yazdırıp ekrana bişeyler bastıktan sonra diğerlerini de yazdırabilirsiniz.