-
שלום וברכה
אני מחפש פונקצייה להמרת מספרים לאותיות וכן הפוך בשפת php
בניתי כבר משהו אבל משום מה זה לא עובד לי אשמח לעזרתכם:function convertWord($word) { if (strlen($word)== 1){ $word = convertLetter($word); } if (strlen($word)== 2){ $a = (intdiv($word, 10))*10; $b = $word-$a; $word = convertLetter($a).convertLetter($b); } if (strlen($word)== 3){ $a = (intdiv($word, 100))*100; $b = (intdiv(($word-$a), 10))*10; $c = $word-$a-$b; $word = convertLetter($a).convertLetter($b).convertLetter($c); } function convertLetter($letter) { $values = [ 1 => 'א', 2 => 'ב', 3 => 'ג', 4 => 'ד', 5 => 'ה', 6 => 'ו', 7 => 'ז', 8 => 'ח', 9 => 'ט', 10 => 'י', 20 => 'כ', 30 => 'ל', 40 => 'מ', 50 => 'נ', 60 => 'ס', 70 => 'ע', 80 => 'פ', 90 => 'צ', 100 => 'ק', 200 => 'ר', 300 => 'ש', 400 => 'ת', ]; return $values[$letter]; }; } echo convertWord(2);
-
יש כאן מחלקה שמישהו כתב
לא אני
הוא כתב זאת עם שימוש באותיות בעברית..
בכל מקרה דוגמא לשימוש הוא$num = גימטריא::אותיות_למספר('קידוש השם')
class גימטריא { /* @ פונקציה סטטית ההופכת אותיות למספר הגימטריא @ הפרמטר הראשון והחובה הוא כמובן המחרוזת אותה רוצים להמיר @ הפרמטר השני אופציונלי ומאפשר להגדיר מפריד שכל התווים עד אליו יחושבו כאלפים */ public static function אותיות_למספר ( $str , $alafim = FALSE ) { $gimatriya = 0 ; if ( ! ($alafim === FALSE) ) { $str = explode ( $alafim , $str ); $gimatriya += self::גימטריא_למספר ( array_shift( $str ) ) * 1000 ; foreach ( $str as $txt ) { $gimatriya += self::גימטריא_למספר ( $txt ) ; } }else{ $gimatriya += self::גימטריא_למספר ( $str ) ; } return $gimatriya ; } /* @ פונקציה סטטית ההופכת מספר לגימטריא @ הפרמטר הראשון והחובה הוא כמובן המספר אותו רוצים להמיר @ השני קובע כברירת מחדל שלאותיות לא יתווספו גרשיים → TRUE יגדיר שכן יהיה גרשיים @ השלישי קובע כברירת מחדל שהאלפים יחושבו בנפרד ולא יתקבל מחרוזת של תתתתתתתתת… כמו כן הוא קובע שהמילה `אלפים` תתווסף למחרוזת ←ניתן להגדיר בו 0 כדי לבטל כליל או אחד כדי לקבל את התוצאה כ ה' תשע"ח למשל בלי המילה אלפים @ הרביעי יקבע האם להציב אותיות מנצפכ בסוף מילה כברירת מחדל או םןץףך אם נגדיר true */ public static function מספר_לאותיות ( $num , $gershayim = FALSE , $alafim = 2 , $םןץףך = FALSE ) { $gimatriya = self::מספר_לגימטריא ( $num , $alafim ) ; if ($gershayim) { $gimatriya = explode ( ' ' , $gimatriya ) ; $i = 0 ; foreach ( $gimatriya as $str ) { if( $str == 'אלפים' ) {$i++; continue ; } if( mb_strlen( $str , 'UTF-8' ) == 1 ) { $gimatriya [$i] .= "'" ; }else{ $gimatriya [$i] = (mb_substr ( $str , 0 , mb_strlen( $str , 'UTF-8' ) - 1 ) . '"' . mb_substr ( $str , mb_strlen( $str , 'UTF-8' )-1 ,1 )) ; } $i++; } $gimatriya = implode ( ' ' , $gimatriya ) ; } if ( $םןץףך ) { $replace = array ( 'מ' => 'ם' ,'נ' => 'ן' ,'צ' => 'ץ' ,'פ' => 'ף' ,'כ' => 'ך' ); $str = $gimatriya ; $last_ot = mb_substr ( $str , mb_strlen( $str , 'UTF-8' )-1 ,1 ) ; $gimatriya = mb_substr ( $str , 0 , mb_strlen( $str , 'UTF-8' ) - 1 ) ; $gimatriya .= in_array ( $last_ot , array ( 'מ', 'נ', 'צ', 'פ', 'כ' ) ) ? $replace[$last_ot] : $last_ot ; } return $gimatriya ; } /* פונקציה סטטית המשווה גימטריא של שתי מחרוזות ומחזירה אמת בהתאמה ושקר באי התאמה @ הפרמטר הראשון והשני הם המחרוזות להשואה @ הפרמטר השלישי והרביעי יגדירו מפריד אלפים עבור המחרוזות שבפרמטר הראשון והשני */ public static function גימטריא_שווה ( $str1 , $str2 , $alafim1 =FALSE , $alafim2 =FALSE ) { return self::אותיות_למספר ( $str1 , $alafim1 ) == self::אותיות_למספר ( $str2 , $alafim2 ) ? TRUE : FALSE ; } //מערך אם גימטריא של כל האותיות protected static $OTIYOT = array ( 'א' => 1 , 'ב' => 2 , 'ג' => 3 , 'ד' => 4 , 'ה' => 5 , 'ו' => 6 , 'ז' => 7 , 'ח' => 8 , 'ט' => 9 , 'י' => 10 , 'כ' => 20 , 'ך' => 20, 'ל' => 30 , 'מ' => 40 , 'ם' => 40 , 'נ' => 50 , 'ן' => 50 , 'ס' => 60 , 'ע' => 70 , 'פ' => 80 , 'ף' => 80 , 'צ' => 90 , 'ץ' => 90 , 'ק' => 100 , 'ר' => 200 , 'ש' => 300 , 'ת' => 400 ); //פונקציה פנימית המבצעת את החישוב ממספר לאותיות protected static function מספר_לגימטריא ( $num , $alafim = 2 ) { $num = (int)$num ; $gimatriya = '' ; switch( $num ) { case 0: break; case ( $num >= 1000 ) : if ( $alafim ) { $rest = $num % 1000 ; $gimatriya .= self::מספר_לגימטריא ( ( $num -$rest ) / 1000 ) ; $gimatriya .= $alafim==2? ' אלפים ' : ' ' ; }else{ $rest = $num % 400 ; foreach( range( 1, ($num -$rest) / 400 ) as $i ) { $gimatriya .= 'ת' ; } } $gimatriya .= self::מספר_לגימטריא ( $rest , $alafim ) ; break; case ( $num >= 400 ): $rest = $num % 400 ; foreach( range( 1, ($num -$rest) / 400 ) as $i ){ $gimatriya .= 'ת' ; } $gimatriya .= self::מספר_לגימטריא ( $rest , $alafim ) ; break; case ( $num >= 100 ): $rest = $num % 100 ; $gimatriya .= array_search ( $num - $rest , self::$OTIYOT ); $gimatriya .= self::מספר_לגימטריא ( $rest , $alafim ) ; break; case 15: $gimatriya .= 'טו' ; break; case 16: $gimatriya .= 'טז' ; break; case ( $num >= 10 ): $rest = $num % 10 ; $gimatriya .= array_search ( $num - $rest , self::$OTIYOT ); $gimatriya .= self::מספר_לגימטריא ( $rest , $alafim ) ; break; case ( $num < 0 ): break; default: $gimatriya .= array_search ( $num , self::$OTIYOT ); } return $gimatriya ; } //פונקציה פנימית המבצעת את החישוב מאותיות למספר protected static function גימטריא_למספר ( $str ) { $str = preg_replace( "/[^א-ת]/" , '' , $str ); $gimatriya = 0 ; for( $i = 0 ; $i < mb_strlen( $str , 'UTF-8' ) ; $i++ ) { $gimatriya += self::$OTIYOT [mb_substr ( $str , $i , 1)] ; } return $gimatriya ; } }//end of class גימטריא
-
@חוקר
משום מה לא הצלחתי לקבל את מה שרציתי מהקוד שלך
אז שיפצרתי את הקוד שלי אפשר להשתמש עם זה בשמחה//גימטריה מספרים לאותיות function convertWord($word) { $convertLetter = function ($letter) { $values = [ 1 => 'א', 2 => 'ב', 3 => 'ג', 4 => 'ד', 5 => 'ה', 6 => 'ו', 7 => 'ז', 8 => 'ח', 9 => 'ט', 10 => 'י', 20 => 'כ', 30 => 'ל', 40 => 'מ', 50 => 'נ', 60 => 'ס', 70 => 'ע', 80 => 'פ', 90 => 'צ', 100 => 'ק', 200 => 'ר', 300 => 'ש', 400 => 'ת', ]; return $values[$letter]; }; if (strlen($word)== 1){ $word = $convertLetter($word); } elseif (strlen($word)== 2){ $a = (intdiv($word, 10))*10; $b = $word-$a; $word = $convertLetter($a).$convertLetter($b); } elseif (strlen($word)== 3){ $a = (intdiv($word, 100))*100; $b = (intdiv(($word-$a), 10))*10; $c = $word-$a-$b; $word = $convertLetter($a).$convertLetter($b).$convertLetter($c); } $word = str_replace("י"."ה","טו",$word); $word = str_replace("י"."ו","טז",$word); return $word; }
עריכה: זה עובד רק עד 499 (אני הייתי צריך את זה רק עד ל 200 אז זה מצוין בשבילי) מי שרוצה מוכן לשפר את זה
-