הקוד שלך שגוי קצת:
א. מרכאות סביב משתנה זבה פשוט מחרוזת במקום פניה למשתנה,
ב. ה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)