
07-05-2006, 08:40
|
|
|
|
חבר מתאריך: 25.08.03
הודעות: 9,114
|
|
ס'ודק, טעות שלי, כיון שלא צויין "תחילת מחרוזת", או "סוף מחרוזת".
בכל אופן נראה לי שבמקרה הזה מעבר על אורך המחרוזת בלולאה תו אחר תו עד מציאת התו העברי הראשון, או עד סיום המחרוזת, ובדיקה באמצעות הפונקציה ord תתן תוצאות יעילות יותר (מבחינת חסכון במשאבי עיבוד).
הייתי מציע גם לבדוק רק עברית, כדאי לדעת אם יש תו עברי במחרוזת, אחרת נניח שמדובר במחרוזת באנגלית בלבד (אלא אם מדובר באתר בינלאומי או כזה שיש סיכוי שיכתבו בו בשפה נוספת).
קוד PHP:
<?php
function isHebrew($str)
{
$count = strlen($str);
$a = ord('א');
$z = ord('ת');
for($i=0; $i<$count; ++$i)
if(($str{$i} >= $a) && ($str{$i} <= $z))
return true;
return false;
}
$isHebrew = isHebrew('some מילים');
?>
כמובן שאין צורך במשתנה המופיע בסוף הקוד, אלא אם נרצה להשתמש במידע שוב, אחרת אפשר בשעת הצורך לקרוא לפונקציה, ואין צורך לשמור את התוצאה במשתנה (אלא אם מעוניינים להשתמש שוב במידע כפי שציינתי - כי אז חבל לערוך בדיקה מחודשת לגבי מלל שכבר נבדק).
השתדלתי לכתוב את הפונקציה שתהיה היעילות מקסימלית בעיקר מבחינת ניצול משאבים.
לדוגמה:
1. פרה קידום (במשתנה i) יעיל יותר מאשר פוסט קידום.
2. שמרתי את אורך המחרוזת במשתנה, כדי למנוע קריאה חוזרת ונשנית אל הפונקציה strlen (ולמרות שלא בדקתי זאת, הגיוני שקריאת ערך שמור כמעט לא מבזבז משהו מהמעבד, בעוד קריאה לפונקציה ואף הקלה ביותר, דורשת הרבה יותר משאבים - באופן יחסי לקריאת ערך ממשתנה).
3. true נכתב באותיות קטנות ולא גדולות.
לגבי שורת הבדיקה המעשית (בדיקת התו הנוכחי וההשואה "קטן מ" ו"גדול מ") לא בדקתי אם ניתן לחסוך משאבים נוספים באמצעות השוואה שביטות שונות, יתכן שיש מקום לחסוך משאבים נוספים.
אני די ממהר, אולי לדור יהיה זמן וחשק להסביר מדוע כתיבה כזאת [לגבי הפרטים שציינתי] חסכונית יותר במשאבים.
נערך לאחרונה ע"י ישראל K בתאריך 07-05-2006 בשעה 09:01.
|