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

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   php | explode מס' הנתונים (https://hosts.co.il/forums/showthread.php?t=62238)

ASTeam 22-04-08 21:17

php | explode מס' הנתונים
 
ערב טוב,
כיצד אוכל לדעת כמה נתונים מופרדים

$answer = explode(";",$answer);
(מי ששואל זה ללואה לדעת מתי להפסיק אותה..)

Daniel 22-04-08 21:19

בפעם אחת זה מפריד את כולם

Tomer 22-04-08 21:33

count($answer) - 1

יונתן 23-04-08 01:17

תומר, בשביל מה אתה מחסיר אחד בסוף?

ASTeam 23-04-08 08:20

כי מתחילים מ0.. נכון?

Tomer 23-04-08 08:22

ציטוט:

נכתב במקור על ידי יונתן (פרסם 626840)
תומר, בשביל מה אתה מחסיר אחד בסוף?

מתחילים מ- 0 את הספירה.

ASTeam 23-04-08 08:38

שאלה נוספת,
כיצד אני בונה משתנה בעל אותה תבנית ומעדכן רק נתון אחד ממנו?
לדוג' -
PHP קוד:

 
$answer 
"a;b;c;d";
// אני רוצה שיהיה כך - 
$vote "0;0;0;0";
// וגם לעדכן רק בפריט מסויים(נגיד 3) שיהיה(להוסיף באחד)
$vote "0;0;1;0";
// כמובן שמס' האיברים לא מוגבל והערכים שבאים משתנים 


Kfir.G 23-04-08 08:39

ציטוט:

נכתב במקור על ידי Tomer (פרסם 626861)
מתחילים מ- 0 את הספירה.

זה לא משנה ממש... זה תלוי איך אתה מגדיר את הלולאה שלך
PHP קוד:

for($i=0;$i<4;$i++)
echo 
$i."<br />\n" 

ציטוט:

0
1
2
3
בדיוק ארבעת התאים למערך שאתה צריך...

PHP קוד:

for($i=1;$i<=4;$i++)
echo 
$i."<br />\n" 

ציטוט:

1
2
3
4
PHP קוד:

for($i=0;$i<=3;$i++)
echo 
$i."<br />\n" 

ציטוט:

0
1
2
3

אני מניח שהבהרתי את הנקודה...

ציטוט:

נכתב במקור על ידי ASTeam (פרסם 626863)
שאלה נוספת,
כיצד אני בונה משתנה בעל אותה תבנית ומעדכן רק נתון אחד ממנו?
לדוג' -
PHP קוד:

 
$answer 
"a;b;c;d";
// אני רוצה שיהיה כך - 
$vote "0;0;0;0";
// וגם לעדכן רק בפריט מסויים(נגיד 3) שיהיה(להוסיף באחד)
$vote "0;0;1;0";
// כמובן שמס' האיברים לא מוגבל והערכים שבאים משתנים 


אתה יכול לעשות את זה עם preg_replace למרות שמה שאני הייתי עושה במקרה הזה זה לפצל את המשתנה עם explode, לשנות את מה שאני צריך ולאחד אותו חזרה עם implode.

ASTeam 23-04-08 08:56

אבל אני לא יודע כמה נתונים יש לי..

DavidBD 23-04-08 09:03

ציטוט:

נכתב במקור על ידי ASTeam (פרסם 626865)
אבל אני לא יודע כמה נתונים יש לי..

count

Tomer 23-04-08 09:07

PHP קוד:

$vote "0;0;0;0";

$vote explode(";",$vote);

$vote[2] = "1";

$vote implode(";",$vote);

echo 
$vote// will be 0;0;1;0 

אולי ... זה יכול לעבוד .... רק תספור באיזה מקום נמצא c, אני מניח שע"י פיצול למערך וכו'

השאלה היא מה אתה צריך לעשות, אולי יש דרך יותר טובה.

Kfir.G,
תתחכם, זה בטח יעזור לך בחיים.

ASTeam 23-04-08 09:17

אני עושה סקר.
אני רוצה שהתשובות האפשריות יהיו ללא הגבלה.
לכן אני מציג את השאלות ע"פ לולאה, אחכ בעזרת קישור(או כל דבר אחר..לא משנה) מכניס לתא votes את מס' המבציעים באותה תבנית
ואז אני אציג
לתשובה 1 - ככה מצביעים וכד'(עם אחוזים כמובן)

וזה עבד מה שעשית..
אני אנסה להתשמש בזה..

השאלה היא, במצב של מס' נתונים לא מוגבל, כיצד אני הופך את התשובה להצבעה - כמו שאמרתי -

$answer = "a;b;c;d";
// אני רוצה שיהיה כך -
$vote = "0;0;0;0";

Tomer 23-04-08 09:25

תקרא על str_repeat, זה יוכל לעזור במקרה שלך (לפרק את answer, לעשות לו count, ועפ"י ה repeat ליצור את vote).

Kfir.G 23-04-08 10:32

ציטוט:

נכתב במקור על ידי ASTeam (פרסם 626865)
אבל אני לא יודע כמה נתונים יש לי..

נתתי את ארבע בתור דוגמה... במקום ארבע תחליף את ככה

PHP קוד:

$len count($arr);
for(
$i=0;$i<len;$i++) 


שים לב לשמור את הגודל של המערך במשתנה מחוץ ללואה! אחרת כל פעם שהלולאה תרוץ הפונקציה count תופעל ואין שום סיבה לכך...

ציטוט:

נכתב במקור על ידי ASTeam (פרסם 626870)
אני עושה סקר.
אני רוצה שהתשובות האפשריות יהיו ללא הגבלה.
לכן אני מציג את השאלות ע"פ לולאה, אחכ בעזרת קישור(או כל דבר אחר..לא משנה) מכניס לתא votes את מס' המבציעים באותה תבנית
ואז אני אציג
לתשובה 1 - ככה מצביעים וכד'(עם אחוזים כמובן)

וזה עבד מה שעשית..
אני אנסה להתשמש בזה..

השאלה היא, במצב של מס' נתונים לא מוגבל, כיצד אני הופך את התשובה להצבעה - כמו שאמרתי -

$answer = "a;b;c;d";
// אני רוצה שיהיה כך -
$vote = "0;0;0;0";

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

$answer="a;b;c"

עכשיו נפצל את answer בעזרת הפונקציה explode, ונשמור את התוצאה.
PHP קוד:

$arr=explode(';',$answer); 

עכשיו נבדוק איזה תשובה הוכנסה ונקח את התווית שלה (key). נניח שהתשובה שמורה במשתנה vote.
PHP קוד:

$key array_search($vote,$arr); 

עכשיו נכניס למשתנה votes את מה שאנחנו צריכים בעזרת לולאה
PHP קוד:

$len count($arr);
for(
$i=0;$i<$len;$i++)
{
if(
$i!=0$votes .= ";";
if(
$i==$key$votes .= "1";
else 
$votes.="0";


אם אתה צריך אפשרויות יותר מ0 ו1 (יותר מהצבעה אחת למשל) מה שתעשה זה ליצור מערך נוסף וכל פעם שהתשובה שווה למשתנה i תגדיל אותו באחד.
זהו ההסבר הזה אמור להספיק לדעתי :)


ציטוט:

נכתב במקור על ידי Tomer (פרסם 626867)
Kfir.G,
תתחכם, זה בטח יעזור לך בחיים.

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

ASTeam 23-04-08 11:40

תודה קפיר
עשיתי כמו שתומר אמר הקוד -
PHP קוד:

$vid intval($_GET['vid]);'
$vote $idw['votes']; // 0;0;0 - מהמסד
$vote explode(";",$vote); // מחלק לכל הנתונים.
$vote[$vid] = $vote[$vid] + 1;// מחפש את המס' של ההצבעה, מוסיף אחד.
$vote implode(";",$vote);// מכניס הכל 

תודה כולם!

Tomer 23-04-08 11:50

ציטוט:

נכתב במקור על ידי Kfir.G (פרסם 626881)
מה בדיוק אתה רוצה ממני אני יכול להבין? אתה אמרת לפותח האשכול לעשות משהו שהוא לא חובה וגם לא הסברת לו באמת למה ככה שנראה לי הולם שהסברתי לו...

לא רוצה ממך כלום,
הסברתי לו שהמערך מתחיל מ 0 - ובמקום לשנות את ה for (במידה והוא משתמש בזה בכלל) שיתחיל מ- 1 (כאשר אני יודע שהרוב מתחילים מ- 0) פשוט להחסיר 1 מהתוצאה של count.

אתם באמת אוהבים להתווכח, או שלפעמים אנשים כאן אשכרה קוראים את התגובות?

Daniel 23-04-08 12:28

במקרה הזה(ורק במקרה הזה =) ), Tomer צודק. ב-PHP, לרוב הספירה מתחיל ב-0, וזה כולל מערכים.
במידה ותעשה print_r(explode(X, Y));
זה יתחיל את הספירה מ-0

BlueNosE 23-04-08 18:38

ציטוט:

נכתב במקור על ידי Tomer (פרסם 626789)
count($answer) - 1

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

PHP קוד:

$var = Array ('one''two''three''four');
echo 
count ($var); // output: "4" 

אתה מוזמן לבדוק.


עריכה:
הכוונה שלי היא, שהוא לא אמר שהוא רוצה לקרוא את האיבר האחרון במערך. הוא בסה"כ רצה לדעת מה הכמות של האיברים.
במקרה שהוא רצה את האיבר האחרון, אפשר גם להשתמש ב-end.

Tomer 23-04-08 18:45

ציטוט:

נכתב במקור על ידי BlueNosE (פרסם 627065)
תומר, זה לא נכון. השימוש בפונקציה COUNT מחזיר בדיוק את מה שאנחנו צריכים - את הכמות של האיברים במערך.

PHP קוד:

$var = Array ('one''two''three''four');
echo 
count ($var); // output: "4" 

אתה מוזמן לבדוק.


עריכה:
הכוונה שלי היא, שהוא לא אמר שהוא רוצה לקרוא את האיבר האחרון במערך. הוא בסה"כ רצה לדעת מה הכמות של האיברים.
במקרה שהוא רצה את האיבר האחרון, אפשר גם להשתמש ב-end.

עומר,
זה לא נכון. כשאתה מכניס את count($x) לתוך לולאת for שרצה כ-

PHP קוד:

for ($x=0$x<=count($y); $x++) 

אתה תתחיל מ 0 עד 4 - אתה צריך מ 0 עד 3 - משמע 4 איברים.

0 1 2 3
לעומת
0 1 2 3 4

לבדוק את עצמך פעם הבאה.

sagi_b 24-04-08 09:54

ציטוט:

נכתב במקור על ידי Tomer (פרסם 627068)
עומר,
זה לא נכון. כשאתה מכניס את count($x) לתוך לולאת for שרצה כ-

PHP קוד:

for ($x=0$x<=count($y); $x++) 

לבדוק את עצמך פעם הבאה.

זה בגלל תנאי השוויון שלך. x קטן או שווה ל-count אך במקרה הזה אתה רוצה לבדוק רק אם הוא קטן יותר:
PHP קוד:

for ($x=0$x<count($y); $x++) 

כמובן שאפשר להשוות ל-count-1 במקום אך זה מסורבל יותר ופחות נפוץ.

ובכלל בדוגמה הזו עדיף להשתמש ב-foreach:
PHP קוד:

foreach ($answers as $answerdosmth($answer); 


Tomer 24-04-08 10:29

ציטוט:

נכתב במקור על ידי sagi_b (פרסם 627191)
זה בגלל תנאי השוויון שלך. x קטן או שווה ל-count אך במקרה הזה אתה רוצה לבדוק רק אם הוא קטן יותר:
PHP קוד:

for ($x=0$x<count($y); $x++) 

כמובן שאפשר להשוות ל-count-1 במקום אך זה מסורבל יותר ופחות נפוץ.

ובכלל בדוגמה הזו עדיף להשתמש ב-foreach:
PHP קוד:

foreach ($answers as $answerdosmth($answer); 


עוד אחד שלא קרא מה שהכותב רשם. זה חסר טעם.

ננעל


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

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