• 07-10-2012, 08:26:28
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    HTML form sayfasından data verisini alıyorum. Bu veriyi yine formda belirtilen başlama ve bitiş değerleri ile işleme sokuyorum. basla ve bitir değerleri arasında kalan string'in karakter sayısı eğer 3'ün katı ise ekrana yazdırıyorum. 3'ün katı değilse "Sonuç bulunamadı" yazıyorum. Buraya kadar her şey tamam.

    Fakat eğer 1'den fazla sonuç bulunursa bunları ekrana nasıl yazdıracağımı anlayamadım.

    Örnek
    Formdan gelen veri : 123Mehmet456
    Bulunan Sonuç : Mehmet
    Uzunluk : 6
    Meh met
    2 bölüm bulundu

    Formdan gelen veri yani $data 123Mehmet456asdas123Mahmut456dsasa123Gokhan456 olursa ekrana sadece Mehmet'i yazıyor. Ben bulduğu tüm sonuçlar için işlem yapmasını istiyorum.

    Bunu ne şekilde yapabilirim ?

    <?php
    function yazdir() {
       global $data, $basla, $bitir;
          
    	  $basla="123";
    	  $bitir="456";
    	  $data="123Mehmet456";
    	  $aranan = "/$basla(.*?)$bitir/";
          $bulunan=preg_match($aranan, $data, $sonuc);
    	  $uzunluk=strlen($sonuc[1]);
    	  
    	  if ($sonuc[1]==null || $uzunluk % 3 !=0) {
    		echo "<br><br>Sonuç bulunamadı";
    	  }
    	  else if ($uzunluk % 3 == 0) {
    		echo "<br><br><b>Bulunan Sonuç</b> : $sonuc[1] <br>";
    		$bolme = str_split($sonuc[1], 3);
    	    echo "Uzunluk : $uzunluk <br>";
    		for($i=0;$i<$uzunluk/3;$i++) {
    			
    			$yaz=$i+1;
    			// Alt alta
    			//echo "<b>Sonuc</b>"." "."<b>"."$yaz"."</b>"." : ".$bolme[$i]."<br>";
    			// Yan yana
    			echo "<b>$bolme[$i]</b>"." ";
    			
    			}
    		$kactane=$uzunluk/3;
    		echo "<br>$kactane bölüm bulundu";
    		}
    	  }
    	  yazdir();
    ?>
  • 07-10-2012, 11:19:25
    #2
    <?php
        $gelen = '123Mehmet456asdas123Mahmut456dsasa123Gokhan456qwrqwrqwr5235';
        preg_match_all('#([^0-9]+)#i', $gelen, $sonuclar);
        foreach($sonuclar[1] as $sonuc){
            $sayi = strlen($sonuc);
            if($sayi % 3 == 0){
                $bol = str_split($sonuc, 3);
                echo 'Bulunan : '.$sonuc.'<br />Uzunluk : '.$sayi.'<br />'.implode(' ', $bol).'<br />'.count($bol).' bölüm bulundu<hr />';
            }else{
                echo $sonuc.' için sonuç bulunamadı<hr />';
            }
        }
    anladığım kadarıyla böyle birşey yapmak istiyorsun ?
  • 07-10-2012, 11:54:13
    #3
    preg_match_all('/123([^\"]*)456/isU', $str, $matches);

    Mehmet,mahmut, gökhan falan gelir bu kodla bir dener misin?
  • 07-10-2012, 12:06:44
    #4
    AKoyun adlı üyeden alıntı: mesajı görüntüle
    anladığım kadarıyla böyle birşey yapmak istiyorsun ?
    Evet, teşekkür ederim.

    preg_match_all('#([^0-9]+)#i', $gelen, $sonuclar);
    Ayıklama işlemini formdan gelecek olan $basla ve $bitir değerlerine göre yapıyorum.

    preg_match_all("/$basla(.*?)$bitir/", $gelen, $sonuclar);
    Şeklinde değiştirdim, bir sorun gözükmüyor şu an.

    miscel adlı üyeden alıntı: mesajı görüntüle
    Mehmet,mahmut, gökhan falan gelir bu kodla bir dener misin?
    Bu da oluyor, teşekkür ederim.

    Peki arkadaşlar

    123Meh met456asdas123Mah mut456dsasa123Gok han456

    tarzı bir gösterim olabilir mi acaba ? Tüm string'i ekrana basarak $basla ve $bitir değerleri arasında kalanları 3'lü karakterlere bölerek kalın yazmak gibi..
  • 07-10-2012, 12:25:33
    #5
    SLiM_BoY adlı üyeden alıntı: mesajı görüntüle

    Peki arkadaşlar

    123Meh met456asdas123Mah mut456dsasa123Gok han456

    tarzı bir gösterim olabilir mi acaba ? Tüm string'i ekrana basarak $basla ve $bitir değerleri arasında kalanları 3'lü karakterlere bölerek kalın yazmak gibi..
    123 ve 456 değişmeli.
    substr sadece bölünen string 6 karakterliyse uygun sonucu veriyor. strlen ile kontrol edilmeli.

    $str = preg_replace_callback(
            '/123([^\"]*)456/isU',
            create_function(
                '$matches',
                '$first = substr($matches[1], 0,3); $last = substr($matches[1], -3, 3); return "123" . "<strong>".$first."</strong>". " " . "<strong>" . $last . "</strong>" .  "456";'
            ),
            $str
        );
  • 07-10-2012, 15:57:01
    #6
    miscel adlı üyeden alıntı: mesajı görüntüle
    123 ve 456 değişmeli.
    substr sadece bölünen string 6 karakterliyse uygun sonucu veriyor. strlen ile kontrol edilmeli.
    Teşekkür ederim. Biraz karışık geldi String'i bazen dosyadan alıyorum, bu yüzden preg_match_all'da işleme giren string değişiyor.

    substr($matches[1], 0,3);

    Durum böyle olunca da 0 ve 3 değerlerini string'e göre ayarlamam gerekiyor. Bakalım halledebilecek miyim