php חיבור מספרים וכו'
-
שלום וברכה
אני מקבל ממרכזייה ערך של תוקף כרטיס אשראי נגיד 0517
בשביל לשדר לחברת אשראי אני צריך שיהיה 1705
אני מסתבך ומסתבך במשהו שמתכנתי PHP יתנו לי פתרון מיידי
הוא כאילו מתייחס למשתנה כInt על אף שאני רוצה שיהיה string ניסיתי כמה פתרונות קלאסיים ועדיין אני מסתבך$cctokef =0517; $cctokef1= strval(substr("$ccnewtokef", 2, 4)); $cctokef2= strval(substr("$ccnewtokef", 0, 2)); print $cctokef1 . $cctokef2;
פורסם במקור בפורום CODE613 ב16/06/2014 23:07 (+03:00)
-
הקוד שלך שגוי קצת:
א. מרכאות סביב משתנה זבה פשוט מחרוזת במקום פניה למשתנה,
ב. הstrval אם צריך אותו בכלל (לדעתי לא צריך כי זה משתמע ממילא) לא נמצא במקום הנכון.
ג. המשתנה הראשון לא מכיל את האפס, כי הוא int כך שלאחר המרה אתה עם 751 במקום 517.
ד. ccnewtokef לא ידוע לנו מהו ומאיפה בא.אבל באמת יש בעיה גם בלי כל זה.
כשאני מנסה בPHP לכתוב ככה:print 0517;
וזה מחזיר 335!
ההסבר המעצבן הוא שערך שמתחיל באפס מתורגם למספר אוקטלי, טוב אז תזין בלי אפס.למעשה, הכי קל לכאורה לקבל את המספר ישירות בסטרינג:
$cctokef = "0517"; $cctokef1 = substr($cctokef, 2, 4); $cctokef2 = substr($cctokef, 0, 2); print $cctokef1 . $cctokef2;
-
או להישאר עם int ולהחליף את הסדר ע"י קוד כזה:
ערך א = 0517
ערך ב = (ערך א / 100) + ( (ערך א % 100) * 100)$cctokef = 517;
print (int)($cctokef / 100) + (($cctokef % 100) * 100);
רק שאז תהיה בעיה עם האפס במקרה שהקלט כזה: 1705 שזה מחזיר 517 במקום 0517. בשביל זה ניתן להשתמש בפונקציות פורמט, מצאתי לדוגמה פונקציית str_pad היא מקבלת סטרינג ומוסיפה ("מרפדת") לו תו מוביל במספר המתבקש:$cctokef = 1705;
$cctokef = ($cctokef / 100) + (($cctokef % 100) * 100);
print str_pad((int)$cctokef, 4, '0', STR_PAD_LEFT);
פורסם במקור בפורום CODE613 ב17/06/2014 12:16 (+03:00)
-
-
-
דוד - הפתרון שנתת אכן טוב (זה מה שאני הייתי עושה גם).
בכל אופן, למה אתה ממיר את הקלט ל-int ואז עושה לך תרגיל ואז שוב מחזיר אותו עם 0 בהתחלה?אתה יכול ישירות לעבוד עם ה-str_pad() ולסגור את הפינה הזאת (תכניס אותו כ-string מלכתחילה).
פורסם במקור בפורום CODE613 ב17/06/2014 23:14 (+03:00)