PHP Dili ile, sayı yazıya nasıl çevrilir?

Profesyonel iş hayatında özellikle de faturaların alt tarafında sık rastladığımız bir durum olan sayıyı yazıya çevirme olayına bu yazımızda değindik. Daha önce C# programlama dili ile 8 haneli bir sayı, yazıya çevrilmişti. Şimdi PHP ile 9 haneye kadar, yani yüzmilyon mertebesindeki bir sayıyı, yazıya çevireceğiz. PHP ile C# dilleri temelde C tabanlı (C'den esinlenen) diller olduğu için yazım şekilleri birbirine benzemektedir. 


Örneğin Klavyeden girilen 7 haneli (örneğin 1.567.293) bir sayıyı, yazılı şekilde (örneğin bir milyon beş yüz altmış yedi bin iki yüz doksan üç) şeklinde yazmaktadır. Sayıyı giren kişi bazı haneler sıfır da girebilir. Örneğin: 07, 089, 0911, 07873, 089876, 0674123 gibi girebilir, bu durumda baştaki sıfır atılarak sayının yazılı ifadesi yazdırılmaktadır.





























İşlemi bir fonksiyon haline çevirdik, $a değişkenine sayımızı atıyoruz ve sonra yaziYacevir fonksiyonuna gönderiyoruz.

$a="912505671";
echo $a."<br>";
echo yaziyaCevir($a);

Yukarıdaki örnek kullanımda sayı dokuz hane olarak verilmiştir, başka sayılar yazarak fonksiyonun verdiği cevabı değerlendirebilirsiniz.
 
function yaziyaCevir($a){

//Aşağıdaki fonksiyonda bir sayı okunurken kullanılan ifadeler dikkate alınarak,
// rakamların 0 ile 9 arasında olması durumunda nasıl ifade edileceği
//gösterilmiştir. switch case yerine if else de kullanarak aynı işlemleri yapabilirdik.

 
function  birlerBul($birlerBasamagi)
            {
             $deger="";
             switch ($birlerBasamagi) {
                    case "0": $deger = "sıfır"; break;
                    case "1": $deger = "bir"; break;
                    case "2": $deger = "iki"; break;
                    case "3": $deger = "üç"; break;
                    case "4": $deger = "dört"; break;
                    case "5": $deger = "beş"; break;
                    case "6": $deger = "altı"; break;
                    case "7": $deger = "yedi"; break;
                    case "8": $deger = "sekiz"; break;
                    case "9": $deger = "dokuz"; break;
                     default:return $deger;
                }
                return $deger;
            }

//Aşağıdaki fonksiyonda ise yine sayının okunuşu düşünülerek yazılmıştır.
 
function onlarBul($onlarBasamagi)
            {
                 $deger="";
                switch ($onlarBasamagi)
                {
                    case "1": $deger = "on"; break;
                    case "2": $deger = "yirmi"; break;
                    case "3": $deger = "otuz"; break;
                    case "4": $deger = "kırk"; break;
                    case "5": $deger = "elli"; break;
                    case "6": $deger = "altmış"; break;
                    case "7": $deger = "yetmiş"; break;
                    case "8": $deger = "seksen"; break;
                    case "9": $deger = "doksan"; break;
                }
                return $deger;
            }
 
 
$sayi=""; $onluk=""; $birlik=""; $yuzluk=""; $binlik="";
$onbinlik="";$yuzbinlik=""; $milyon=""; $milyar="";
$basamaksay = 0;
 
$basamaksay = strlen($a);
   if ($basamaksay == 1) {
$sayi= birlerBul($a);

// basamak sayısı 2 ise,
// burada kullanılan substr($a, 0 ,1) ifadesi $a metninin ilk karekterinden
// bir tane al demektir, sayı 12 ise burada 1 alınacaktır. Numaralandırma
// dikkat ederseniz sıfırdan başlamaktadır.
if ($basamaksay == 2)
            {
              $onluk = substr($a,0,1);
              $birlik = substr($a,1,1);
 
              $sayi= onlarBul($onluk);
 
              if ($birlik!="0") 
              $sayi.=birlerBul($birlik);
            }

// basamak sayısı 3 ise 
// Sayımız üç basamaklı ise birler, onlar ve yüzler basamağını ayrıştırıp,
// buna göre ilgili fonksiyonları çağırıyoruz.  Bundan sonraki işlemler
// hep aynı şekilde benzer mantıkla  tekrarlanıyor. 011, 0234 gibi
// sayının önünde sıfır varsa hesaba katmıyoruz.

 
if ($basamaksay == 3)
            {   
                $yuzluk = substr($a,0,1);
                $onluk = substr($a,1, 1);
                $birlik = substr($a, 2, 1);
 
                if ($yuzluk!="1" && $yuzluk!="0")
                $sayi= birlerBul($yuzluk)."yüz";
                if ($yuzluk == "1")
                 $sayi = "yüz";
 
                if ($onluk != "0")
                    $sayi .= onlarBul($onluk);
                if ($birlik != "0")
                    $sayi .= birlerBul($birlik);
            }

// basamak sayısı 4 ise 
            if ($basamaksay == 4)
            {
                $binlik = substr($a,0, 1);
                $yuzluk = substr($a,1, 1);
                $onluk  = substr($a,2, 1);
                $birlik = substr($a,3, 1);
 
                if ($binlik != "1")
                    $sayi = birlerBul($binlik)."bin";
                if ($binlik == "1")
                    $sayi = "bin";
 
                if ($yuzluk != "1" && $yuzluk != "0")
                    $sayi .= birlerBul($yuzluk) . "yüz";
                else if ($yuzluk == "1")
                    $sayi .= "yüz";
                else if ($yuzluk == "0")
                    $sayi .= "";
 
                if ($onluk != "0")
                    $sayi .= onlarBul($onluk);
                if ($birlik != "0")
                    $sayi .= birlerBul($birlik);
            }

// basamak sayısı 5 ise 
            if ($basamaksay == 5)
            {
               
                $onbinlik = substr($a,0, 1);
                $binlik = substr($a,1, 1);
                $yuzluk = substr($a,2, 1);
                $onluk = substr($a,3, 1);
                $birlik = substr($a,4, 1);
 
                if ($onbinlik != "0")
                $sayi = onlarBul($onbinlik);
 
                if ($binlik != "0")
                    $sayi .= birlerBul($binlik) . "bin";
                else $sayi .= "bin";
 
 
                if ($yuzluk != "1" && $yuzluk!="0")
                    $sayi .= birlerBul($yuzluk) . "yüz";
                else if ($yuzluk == "1")
                    $sayi .= "yüz";
                else if ($yuzluk == "0")
                    $sayi .= "";
 
                if ($onluk != "0")
                    $sayi .= onlarBul($onluk);
                if ($birlik != "0")
                    $sayi .= birlerBul($birlik);
            }

// basamak sayısı 6 ise 
            if ($basamaksay == 6)
            {
 
                $yuzbinlik= substr($a,0, 1);
                $onbinlik = substr($a,1, 1);
                $binlik = substr($a,2, 1);
                $yuzluk = substr($a,3, 1);
                $onluk = substr($a,4, 1);
                $birlik = substr($a,5, 1);
 
                if ($yuzbinlik != "0" && $yuzbinlik != "1")
                    $sayi = birlerBul($yuzbinlik) ."yüz";
                else if ($yuzbinlik == "1")
                    $sayi = "yüz";
                else $sayi .= "";
               
 
                if ($onbinlik != "0")
                    $sayi .= onlarBul($onbinlik);
                
 
                if ($binlik != "0")
                    $sayi .= birlerBul($binlik) . "bin";
                else $sayi .= "bin";
 
 
                if ($yuzluk != "1" && $yuzluk != "0")
                    $sayi .= birlerBul($yuzluk) . "yüz";
                else if ($yuzluk == "1")
                    $sayi .= "yüz";
                else if ($yuzluk == "0")
                    $sayi .= "";
 
                if ($onluk != "0")
                    $sayi .= onlarBul($onluk);
                if (birlik != "0")
                    $sayi .= birlerBul($birlik);
            }

// basamak sayısı 7 ise 
if ($basamaksay == 7)
            {
                $milyon = substr($a,0, 1);
                $yuzbinlik = substr($a,1, 1);
                $onbinlik = substr($a,2, 1);
                $binlik = substr($a,3, 1);
                $yuzluk = substr($a,4, 1);
                $onluk = substr($a,5, 1);
                $birlik =substr($a,6, 1);
 
                if ($milyon != "0")
                    $sayi = birlerBul($milyon) . "milyon";
                else $sayi = "";
 
                if ($yuzbinlik != "0")
                    $sayi .= birlerBul($yuzbinlik) ."yüz";
                else $sayi .= "";
 
 
                if ($onbinlik != "0")
                    $sayi .= onlarBul($onbinlik);
 
 
                if ($binlik != "0")
                    $sayi .= birlerBul($binlik) . "bin";
                else $sayi .= "bin";
 
 
                if ($yuzluk != "1" && $yuzluk != "0")
                    $sayi .= birlerBul($yuzluk) . "yüz";
                else if ($yuzluk == "1")
                    $sayi .= "yüz";
                else if ($yuzluk == "0")
                    $sayi .= "";
 
                if ($onluk != "0")
                    $sayi .= onlarBul($onluk);
                if ($birlik != "0")
                    $sayi .= birlerBul($birlik);
            }

// basamak sayısı 8 ise 
if ($basamaksay == 8)
            {
$onmilyon=substr($a,0, 1);
                $milyon = substr($a,1, 1);
                $yuzbinlik = substr($a,2, 1);
                $onbinlik = substr($a,3, 1);
                $binlik = substr($a,4, 1);
                $yuzluk = substr($a,5, 1);
                $onluk = substr($a,6, 1);
                $birlik =substr($a,7, 1);
 
if ($onmilyon != "0")
                $sayi = onlarBul($onmilyon);
 
 
                if ($milyon != "0")
                    $sayi.= birlerBul($milyon) . "milyon";
                else $sayi = "";
 
                if ($yuzbinlik != "0")
                    $sayi .= birlerBul($yuzbinlik) ."yüz";
                else $sayi .= "";
 
 
                if ($onbinlik != "0")
                    $sayi .= onlarBul($onbinlik);
 
 
                if ($binlik != "0")
                    $sayi .= birlerBul($binlik) . "bin";
                else $sayi .= "bin";
 
 
                if ($yuzluk != "1" && $yuzluk != "0")
                    $sayi .= birlerBul($yuzluk) . "yüz";
                else if ($yuzluk == "1")
                    $sayi .= "yüz";
                else if ($yuzluk == "0")
                    $sayi .= "";
 
                if ($onluk != "0")
                    $sayi .= onlarBul($onluk);
                if ($birlik != "0")
                    $sayi .= birlerBul($birlik);
            }
 

// basamak sayısı 9 ise 
if ($basamaksay == 9)
{
$yuzmilyon=substr($a,0, 1);
$onmilyon=substr($a,1, 1);
                $milyon = substr($a,2, 1);
                $yuzbinlik = substr($a,3, 1);
                $onbinlik = substr($a,4, 1);
                $binlik = substr($a,5, 1);
                $yuzluk = substr($a,6, 1);
                $onluk = substr($a,7, 1);
                $birlik =substr($a,8, 1);
 
if ($yuzmilyon != "0" && $yuzmilyon != "1")
                    $sayi.= birlerBul($yuzmilyon) ."yüz";
                else if ($yuzmilyon == "1")
                    $sayi.= "yüz";
                else $sayi.= "";
         
 
if ($onmilyon != "0")
                $sayi .= onlarBul($onmilyon);
 
 
                if ($milyon != "0")
                    $sayi.= birlerBul($milyon) . "milyon";
                else $sayi = "";
 
                if ($yuzbinlik != "0")
                    $sayi .= birlerBul($yuzbinlik) ."yüz";
                else $sayi .= "";
 
 
                if ($onbinlik != "0")
                    $sayi .= onlarBul($onbinlik);
 
 
                if ($binlik != "0")
                    $sayi .= birlerBul($binlik) . "bin";
                else $sayi .= "bin";
 
 
                if ($yuzluk != "1" && $yuzluk != "0")
                    $sayi .= birlerBul($yuzluk) . "yüz";
                else if ($yuzluk == "1")
                    $sayi .= "yüz";
                else if ($yuzluk == "0")
                    $sayi .= "";
 
                if ($onluk != "0")
                    $sayi .= onlarBul($onluk);
                if ($birlik != "0")
                    $sayi .= birlerBul($birlik);
            }
 
 
return $sayi;
}

Bu problemin daha kısa bir çözüm yolu olabilir, şimdilik doğru sonuç verecek diğer bir deyişle iş görecek kadar bir fonksiyon yazdım. Sayıların başında sıfır olunca, önemsenmediğine dikkat ediniz.

KODLARI İNDİR

İyi çalışmalar - Kasım 2014

Tavsiye edilen Kaynak

C# ile Sayıyı Yazıya Çevirme
http://www.oguzhantas.com/csharp/25-csharp-ile-sayiyi-yaziya-cevirebilme.html
Bookmark and Share