• 16-02-2019, 00:05:27
    #1
    Merhabalar,

    Arkadaşlar sorunumu kısaca özetlemek gerekirse, mysql tablomdan gelen verilerde 1 - 30 arası rakamlar var.

    Örneğin gelen veri 1 ise, ben bunu YAZIYLA BİR yapmak istiyorum. Bunu basit şekilde yapıyorum aslında. Ancak gelen veri 10 ise, bu durumda bu verinin yerine de BİR0 yazmış oluyor. Oysa ben 10 olarak gelen veriyi, YAZIYLA ON olarak yazdırmak istiyorum.

    Yani burada demek istediğim, 1 rakamını bul ve değiştir dediğimde sadece 1 rakamı birlik sayı ise bulsun değiştirsin. Eğer gelen veri 10 ise, ilk baştaki 1'i yorumlamasın istiyorum. Aynı şekilde 2 ve 3 rakamları içinde böyle olması gerekiyor.

    Esasında *?.~| gibi karakterlerle deneme yaptım ama bir türlü çözemedim.
    Sorunumu anlatabildiğimi umuyorum, yardımcı olabilecek arkadaşlara şimdiden teşekkür ederim.

    preg_replace olmaz da, str_replace de olur. İşimi görmesi yeterli.
  • 16-02-2019, 00:13:27
    #2
    Hocam buyrun,

    ​function yaziylasayi($sayi) { 
        $o = array( 
            'birlik' => array('bir', 'iki', 'üç', 'dört', 'beş', 'altı', 'yedi', 'sekiz', 'dokuz'), 
            'onluk' => array('on', 'yirmi', 'otuz', 'kırk', 'elli', 'altmış', 'yetmiş', 'seksen', 'doksan'), 
            'basamak' => array('yüz', 'bin', 'milyon', 'milyar', 'trilyon', 'katrilyon') 
        ); 
    
        // Sayıyı basamaklarına ayırıyoruz 
        $basamak = array_reverse(str_split(implode('', array_reverse(str_split($sayi))), 3)); 
    
        // Basamak sayısını belirliyoruz 
        $basamak_sayisi = count($basamak); 
    
        // Her basamak için: 
        for($i=0; $i < $basamak_sayisi; ++$i) { 
            // Sayıyı basamaklarına ayırdığımızda basamaklar tersine döndüğü için burada ufak bir işlem ile basamakları düzeltiyoruz 
            $basamak[$i] = implode(array_reverse(str_split($basamak[$i]))); 
            
            // Eğer basamak 4, 8, 15, 16, 23, 42 gibi 1 veya 2 rakamlıysa başına 3 rakama tamamlayacak şekilde "0" ekliyoruz ki foreach döngüsünde problem olmasın 
            if(strlen($basamak[$i]) == 1) 
                $basamak[$i] = '00' . $basamak[$i]; 
            elseif(strlen($basamak[$i]) == 2) 
                $basamak[$i] = '0' . $basamak[$i]; 
        } 
    
        $yenisayi = array(); 
    
        // Her basamak için: ($yenisayi değişkenine) 
        foreach($basamak as $k => $b) { 
            // basamağın ilk rakamı 0'dan büyük ise 
            if($b[0] > 0) 
                // değişkene rakamın harfle yazılışı ve "yüz" ekliyoruz 
                $yenisayi[] = ($b[0] > 1 ? $o['birlik'][$b[0]-1] . ' ' : '') . $o['basamak'][0]; 
    
            // basamağın 2. rakamı 0'dan büyük ise 
            if($b[1] > 0) 
                // değişkene rakamın harfle yazılışını ekliyoruz 
                $yenisayi[] = $o['onluk'][$b[1]-1]; 
    
            // basamağın 3. rakamı 0'dan büyük ise 
            if($b[2] > 0) 
                // değişkene rakamın harfle yazılışını ekliyoruz 
                $yenisayi[] = $o['birlik'][$b[2]-1]; 
    
            // değişkene basamağın ismini (bin, milyon, milyar) ekliyoruz 
            if($basamak_sayisi > 1) 
                $yenisayi[] = $o['basamak'][$basamak_sayisi-1]; 
    
            // Basamak sayısını azaltıyoruz ki her basamağın sonuna ilkinde ne yazıyorsa o yazılmasın 
            --$basamak_sayisi; 
        } 
        
        return implode(' ', $yenisayi); 
    } ​
  • 16-02-2019, 00:20:18
    #3
    Bende bunu uygulayacak yetenek kesinlikle yok ama yine de çok teşekkürler hocam. Ben başka alternatiflere bakayım.

    Kolay gelsin.

    picpoket adlı üyeden alıntı: mesajı görüntüle
    Hocam buyrun,

    ​function yaziylasayi($sayi) { 
        $o = array( 
            'birlik' => array('bir', 'iki', 'üç', 'dört', 'beş', 'altı', 'yedi', 'sekiz', 'dokuz'), 
            'onluk' => array('on', 'yirmi', 'otuz', 'kırk', 'elli', 'altmış', 'yetmiş', 'seksen', 'doksan'), 
            'basamak' => array('yüz', 'bin', 'milyon', 'milyar', 'trilyon', 'katrilyon') 
        ); 
    
        // Sayıyı basamaklarına ayırıyoruz 
        $basamak = array_reverse(str_split(implode('', array_reverse(str_split($sayi))), 3)); 
    
        // Basamak sayısını belirliyoruz 
        $basamak_sayisi = count($basamak); 
    
        // Her basamak için: 
        for($i=0; $i < $basamak_sayisi; ++$i) { 
            // Sayıyı basamaklarına ayırdığımızda basamaklar tersine döndüğü için burada ufak bir işlem ile basamakları düzeltiyoruz 
            $basamak[$i] = implode(array_reverse(str_split($basamak[$i]))); 
            
            // Eğer basamak 4, 8, 15, 16, 23, 42 gibi 1 veya 2 rakamlıysa başına 3 rakama tamamlayacak şekilde "0" ekliyoruz ki foreach döngüsünde problem olmasın 
            if(strlen($basamak[$i]) == 1) 
                $basamak[$i] = '00' . $basamak[$i]; 
            elseif(strlen($basamak[$i]) == 2) 
                $basamak[$i] = '0' . $basamak[$i]; 
        } 
    
        $yenisayi = array(); 
    
        // Her basamak için: ($yenisayi değişkenine) 
        foreach($basamak as $k => $b) { 
            // basamağın ilk rakamı 0'dan büyük ise 
            if($b[0] > 0) 
                // değişkene rakamın harfle yazılışı ve "yüz" ekliyoruz 
                $yenisayi[] = ($b[0] > 1 ? $o['birlik'][$b[0]-1] . ' ' : '') . $o['basamak'][0]; 
    
            // basamağın 2. rakamı 0'dan büyük ise 
            if($b[1] > 0) 
                // değişkene rakamın harfle yazılışını ekliyoruz 
                $yenisayi[] = $o['onluk'][$b[1]-1]; 
    
            // basamağın 3. rakamı 0'dan büyük ise 
            if($b[2] > 0) 
                // değişkene rakamın harfle yazılışını ekliyoruz 
                $yenisayi[] = $o['birlik'][$b[2]-1]; 
    
            // değişkene basamağın ismini (bin, milyon, milyar) ekliyoruz 
            if($basamak_sayisi > 1) 
                $yenisayi[] = $o['basamak'][$basamak_sayisi-1]; 
    
            // Basamak sayısını azaltıyoruz ki her basamağın sonuna ilkinde ne yazıyorsa o yazılmasın 
            --$basamak_sayisi; 
        } 
        
        return implode(' ', $yenisayi); 
    } ​
  • 16-02-2019, 00:23:49
    #4
    ARKaDaS adlı üyeden alıntı: mesajı görüntüle
    Bende bunu uygulayacak yetenek kesinlikle yok ama yine de çok teşekkürler hocam. Ben başka alternatiflere bakayım.

    Kolay gelsin.

    Hocam sadece kodu alın uygun bir yere kopyalayın ve yazıya dönüşmesini istediğiniz sayıyı yaziylayaz($GELENVERI); şeklinde bastırın
  • 16-02-2019, 00:55:26
    #5
    picpoket adlı üyeden alıntı: mesajı görüntüle
    Hocam sadece kodu alın uygun bir yere kopyalayın ve yazıya dönüşmesini istediğiniz sayıyı yaziylayaz($GELENVERI); şeklinde bastırın
    Hocam teşekkürler. Fakat BİR / ON gibi kelimeleri örnek olarak verdim. Yoksa 1 gelen yere BİR değil, daha uzun başka bir yazı yazdırmak istiyorum. Veya aynı şekilde 10 gelen yere, 17 gelen yere.. gibi..

    Kendimce bir çözüm buldum. Gelen değişkenin sonuna bir karakter ekleyeceğim. Mesela 1 geliyorsa, 1ze yapacağım, bu durumda 10 gelince de 10ze olacak. Replace ederken de 1ze, 10ze kelimelerini replace edersem, karışıklığı ortadan kaldırırım ve işimi görür diye düşünüyorum.

    İlginiz için tekrar teşekkürler.
  • 16-02-2019, 01:17:47
    #6
    ARKaDaS adlı üyeden alıntı: mesajı görüntüle
    Hocam teşekkürler. Fakat BİR / ON gibi kelimeleri örnek olarak verdim. Yoksa 1 gelen yere BİR değil, daha uzun başka bir yazı yazdırmak istiyorum. Veya aynı şekilde 10 gelen yere, 17 gelen yere.. gibi..

    Kendimce bir çözüm buldum. Gelen değişkenin sonuna bir karakter ekleyeceğim. Mesela 1 geliyorsa, 1ze yapacağım, bu durumda 10 gelince de 10ze olacak. Replace ederken de 1ze, 10ze kelimelerini replace edersem, karışıklığı ortadan kaldırırım ve işimi görür diye düşünüyorum.

    İlginiz için tekrar teşekkürler.
    Peki hocam siz bilirsiniz bundada limit yok oraya 1010101010 da yazsanız size yazı olarak dönecekti yani diğer türlü uğraşmanızdan kolay ondan dolayı söylemiştim kolay gelsin rica ederim