הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   עזרה עם ביטויים רגולרים(לא הצד החזק שלי) (https://hosts.co.il/forums/showthread.php?t=91835)

link 29-08-11 21:04

עזרה עם ביטויים רגולרים(לא הצד החזק שלי)
 
שלום לכולם,
אני מנסה לפתור בעיה בעזרת ביטויים רגולרים אבל אני לא מצליח ממש. הבעיה היא: יש לי לוגיקה של שפה שאימצתי לעצמי לקראת הפרויקט שאני מפתח אותו כרגע(אני הרכבתי אותה) והיא עובדת בצורה הבאה: כל טקטס שהולך בצורה
PHP קוד:

{%lang['main']['number']} 

הוא בעצם מכוון אותי לאיזה קבצי שפה לגשת, ואיזה מפתח לחפש. במקרה שלנו main הוא הקובץ שמכיל את מפתחות השפה ו-number הוא המפתח במערך השפה.

ניסתי עם preg_match_all שבעצם יחזיר לי המפתחות אבל לא ממש הצלחתי. הצעות למישהו?

Itay 29-08-11 21:13

PHP קוד:

$text "blsfa sf afsa{%lang['main']['number']}sfas fsaf sfas sfassa{%lang['bla']['test']} fasfsaf sf ssfsafa";
$ptrn "/{%lang(.*?)}/ismx";
preg_match_all($ptrn$text$arr); 

יחזיר לך את
קוד:

{%lang['main']['number']}

link 29-08-11 21:30

כן, אבל אני רוצה לקבל את המפחות, במקרה הזה את main ו-room

Itay 29-08-11 22:51

הכל עם אותו רעיון, פשוט תגביל אותו על ה-['']
זה הקוד:
PHP קוד:

$text "blsfa sf afsa{%lang['main']['number']}sfas fsaf sfas sfassa{%lang['bla']['test']} fasfsaf sf ssfsafa";
$ptrn "/{%lang\['(.*?)'\]\['(.*?)'\]}/ismx";
preg_match_all($ptrn$text$arr); 

עריכה: תיקון - יותר נכון לכתוב ככה:
PHP קוד:

$text "blsfa sf afsa{%lang['main']['number']}sfas fsaf sfas sfassa{%lang['bla']['test']} fasfsaf sf ssfsafa";
$ptrn "/{%lang\['([^'\]]+)'\]\['([^'\]]+)'\]}/ismx";
preg_match_all($ptrn$text$arr); 


link 30-08-11 19:30

והאלגוריתם הסופי(למי שירצה אי פעם להשתמש בזה):
PHP קוד:

    function language_login() {
        if(!empty(
$this->output)) {
            
preg_match_all("/{%lang\['([^'\]]+)'\]\['([^'\]]+)'\]}/ismx"$this->output$arr);
            
            
// unified keys.
            
foreach($arr[1] as $value) {
                
$unified[$value] = true;
            }
            
            foreach(
array_keys($unified) as $key) {
                foreach(
$arr[2] as $value) {
                    if(isset(
$this->lang[$key][$value])) {
                        
$this->output str_replace("{%lang['{$key}']['{$value}']}"$this->lang[$key][$value], $this->output);
                    }
                }
            }
        }
    } 

תודה רבה על העזרה.

בניה 30-08-11 22:58

ישנם הרבה פתרונות מוכנים לריבוי שפות בPHP, אני מציע לך לבחון אותם לפני שאתה מתבסס על אחד משלך.

link 31-08-11 18:22

ציטוט:

נכתב במקור על ידי בניה (פרסם 817106)
ישנם הרבה פתרונות מוכנים לריבוי שפות בPHP, אני מציע לך לבחון אותם לפני שאתה מתבסס על אחד משלך.

הייתי בוחן את זה בתור לוגיקה של שפה, כלומר איך לגשת למערך שמחזיק משתנים של שפות. פשוט לדעתי כרגע מערך דו מימדי הוא הכי נכון לסדר גודל של מה שאני מתכנן אבל תודה בכול מקרה.

כמו כן, גם חשבתי להשתמש בריבוי שפות כמו של דרופל אבל העדפתי שלא.

בניה 31-08-11 21:22

ציטוט:

נכתב במקור על ידי link (פרסם 817262)
הייתי בוחן את זה בתור לוגיקה של שפה, כלומר איך לגשת למערך שמחזיק משתנים של שפות. פשוט לדעתי כרגע מערך דו מימדי הוא הכי נכון לסדר גודל של מה שאני מתכנן אבל תודה בכול מקרה.

כמו כן, גם חשבתי להשתמש בריבוי שפות כמו של דרופל אבל העדפתי שלא.

היעילות שזה מאוד בעייתית.
כדאי לפחות לעשות לזה CACHING או משהו

link 31-08-11 22:40

ציטוט:

נכתב במקור על ידי בניה (פרסם 817286)
היעילות שזה מאוד בעייתית.
כדאי לפחות לעשות לזה CACHING או משהו

לא הייתי פונה למטמון בשביל השפה כי זו מערכת מאוד קטנה מבחינת לוגיקת השפה ובגלל זה גם לא חשבתי לאחסן מידע במסד אלא במערכים.


כל הזמנים הם GMT +2. הזמן כעת הוא 18:52.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ