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.
preg_replace konusunda yardım
5
●130
- 16-02-2019, 00:13:27Hocam 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:18Bende 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 - 16-02-2019, 00:23:49ARKaDaS 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
- 16-02-2019, 00:55:26Hocam 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..picpoket adlı üyeden alıntı: mesajı görüntüle
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:47Peki hocam siz bilirsinizARKaDaS adlı üyeden alıntı: mesajı görüntüle
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