ציטוט:
נכתב במקור על ידי MasterT
ואוו, צודק, שכחתי בכלל לבדוק במחרוזת ארוכה, הממ, גם לי זה מוזר - הייתי מצפה שבמחרוזת ארוכה, דווקא השיטה שלי תיהיה מהירה יותר ושלך איטית יותר - הרי אתה עובר על כל תו בטקסט..
|
בדיוק זאת הסיבה שהשיטה שלי מהירה יותר. אני
לא עובר על כל תו בטקסט ואתה
כן פשוט בגלל שexplode עובר על כל המחרוזת ומפצל אותה לפי המפריד ובשיטה שלי אתה סופר את המפריד. ככה שמה שמשתנה ממחרוזת ארוכה וקצרה אצלי זה strlen וsubstr.
בקשר לפונקציות שלך אני כבר אסתכל ואני אערוך

עלה לי עוד רעיון בהשראתך איך לשפר את הפונקציה שכתבתי קודם
עריכה:
טוב הפעם החלטתי לקחת מחרוזת ארוכה יותר ובגלל שלא רציתי להפריע לביצועים של המחשב שלי הרצתי את זה על שרת חלש יותר מהמחשב שלי ולכן התוצאות הן כאלה :P
לקחתי את הפוקנציה שלך וחשבתי לעצמי שהגורם המעכב המפריע ביותר כאן הוא הsubstr אז הורדתי אותו ואכן היעילות השתפרה פלאים
הפונקציות
PHP קוד:
function getWords1($str, $num, $seperator = ' ')
{
$count = 0;
$i = 0;
do {
if ($str[$i] == $separator)
++$count;
++$i;
} while (isset($str[$i]) && $count < $num);
return substr($str, 0, $i);
}
function getWords2 ($str, $num, $separator = ' ')
{
$count = 0;
$i = 0;
$nstr = "";
do {
if ($str[$i] == $separator) {
++$count;
$nstr .= $str[$i];
}
++$i;
} while (isset($str[$i]) && $count < $num);
return $nstr;
}
התוצאות
PHP קוד:
71.2109460831 seconds for getWords1($str, 5)
1.75991106033 seconds for getWords2($str, 5)
התוצאה ברורה ולכן גם המסקנה כזאת (

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