• 20-01-2018, 15:07:59
    #1
    Aşağıdaki gibi gelen verilerden sadece ilk kısımdaki sayıları nasıl alabiliriz?
    412141241/bebabas?ip=161688112 -> 412141241
    0009491135&note=1111 -> 0009491135
    9094949112?error=99 -> 9094949112

    Gelen verilerin ilk kısımları aynı yapıda geliyor ancak sonrasında özel karakter sürekli değişiyor ve devamındada sayılar mevcut. Belirtilen verilerden sadece yanında belirttiğim şekilde ilk sayıları almak istiyorum, çeşitli fonksiyonlar yazarak çalıştırdım ancak sayıları istediğim şekilde ayıramadım. Fikirlerinizi bekliyorum.
  • 20-01-2018, 15:16:54
    #2
    1. dizgeyi

    $ilksayilar = explode("/",$gelenstring); // yada değişken adı
    //aradığın sonuç şurda $ilksayilar[0]
    2. dizge için

    $ilksayilar = explode("&", $gelenstring); // yada değişken adı
    //aradığın sonuç şurda $ilksayilar[0]
    3.dizge için

    $ilksayilar = explode("?", $gelenstring); // yada değişken adı
    //aradığın sonuç şurda $ilksayilar[0]
    3 ü tek değişkende geliyorsa birbirinden ayırmak için.

    if (strpos($gelenstring, '/') !== false) {
    // / ile gelen işlemi burda
    }else if(strpos($gelenstring, '?') !== false){
    // ? ile gelen işlemi burda
    }else if(strpos($gelenstring, '&') !== false){
    // & ile gelen işlemi burda
    }
    //return $ilksayilar[0]; yaptığında ilk kısım dönectir




    hatta gel fonksiyonlaştırıp atalım;
    function ilkdonder($string){
    if (strpos($string, '/') !== false) {
    $ilksayilar = explode("/",$gelenstring); // yada değişken adı
    }else if(strpos($string, '?') !== false){
    $ilksayilar = explode("&", $gelenstring); // yada değişken adı
    }else if(strpos($string, '&') !== false){
    $ilksayilar = explode("?", $gelenstring); // yada değişken adı
    }else{
    $ilksayilar[0] = "hatalı dizge";
    }
    return $ilksayilar[0];
    }




    kusura bakma yukardaki fonskiyonda $gelenstring yazan yerler $string olmalı
  • 20-01-2018, 17:03:08
    #3
    İlginize teşekkür ederim ancak aynı mantığı bende düşündüm. Ancak çok fazla veri çeşitliliği olduğu için explode kullanarak değilde başka bir fikir gerekiyor. Çünkü aynı anda &? - ?& - %? gibi çok farklı parametreler geliyor. Tam olarak istediğim şu;

    1111111111//&(&+074506405
    1111111111&note%^40340
    1111111111?ace=500
    1111111111dddd550

    gibi gelen verilerde bir şekilde sadece "1111111111" sonucunu almak. Yani her değer için ayrı ayrı işlem değil, sadece ilk baştaki rakamları net şekilde alabileceğim, her türlü parametrede iş görebilecek bir kod.
  • 20-01-2018, 18:31:09
    #4
      <?php
      function sayilar($s) {
      $p = "/^(\d+).+$/";
      preg_match($p,$s,$t);
      return $t[1];
    }
      echo sayilar("1111111111dddd550"); // Çıktı: 1111111111
      ?>
  • 20-01-2018, 18:49:15
    #5
    Responsive adlı üyeden alıntı: mesajı görüntüle
    <?php function sayilar($s) { $p = "/^(\d+).+$/"; preg_match($p,$s,$t); return $t[1]; } echo sayilar("1111111111dddd550"); // Çıktı: 1111111111 ?>
    Evet bu işimi gördü, teşekkür ediyorum. Burada kullandığınız "/^(\d+).+$/" ne anlam ifade ediyor? Bu kullanımları bilmiyorum, hangi başlık altında öğrenmeliyim acaba?
  • 20-01-2018, 19:01:29
    #6
    BerkanY adlı üyeden alıntı: mesajı görüntüle
    Evet bu işimi gördü, teşekkür ediyorum. Burada kullandığınız "/^(\d+).+$/" ne anlam ifade ediyor? Bu kullanımları bilmiyorum, hangi başlık altında öğrenmeliyim acaba?
    Regular expression, regex, düzenli ifadeler olarak geçiyor. Ağır bir konu ben de alışma aşamasındayım, uzmanı değilim
    Baştaki ve sondaki eğik çizgi standart.
    ^ ile satır başlıyor, $ ile bitiyor.
    \d rakam, . (nokta) ise herhangi bir karakter anlamına gelir. Bunların sonuna + eklersek karakter sınırı kaldırılır, bir rakam değil ne kadar varsa o kadarını alır.
    Parantezler yakalama gruplarıdır. İçlerindeki koşullara uyanları yakalarlar. Bizim rakamları yakalamamız gerektiğinden onları parantez içerisinde yazdım.
    preg_match konusu da şurada: http://php.net/manual/en/function.preg-match.php
    İşinize yaradığına sevindim kolay gelsin.