Page 1 of 1

รบกวนถามเกี่ยวกับเรื่อง String ใน php

Posted: 28/01/2008 12:40 am
by hiruma
คือถ้าผมต้องการสุ่มค่า 3 ตัว (หรือหลายๆตัว)แล้วไปแทนที่ในอีกข้อความหนึ่งจะทำอย่างไรครับ

เช่น
มี String คือ "hello boy my name is boy and love boy"

และค่าของคำสุ่มอาจจะเป็น
girl,jack,jib

ผลลัพธ์ไม่อยากให้มันแก้ boy เป็น girl หรือ jack หรือ jib ทั้งหมดครับ
อยากให้มันสุ่ม
ถ้าใช้ str_replace มันจะแทนค่าหมดเลยครับ
เช่น "hello girl my name is girl and love girl"
ต้องการให้เป็น
"hello girl my name is jib and love jack"
"hello jack my name is jack and love jib"

แบบว่าสุ่มมั่วอ่ะครับในคำที่เรากำหนดให้แทนที่ boy ครับ
ขอบคุณที่ช่วยเหลือครับ

Posted: 28/01/2008 4:00 am
by icphysics
ตัดมันออกมาเป็น คำๆ ก่อนซิครับ แล้ว ค่อย วน loop แทนที่ เอา

Posted: 28/01/2008 4:12 am
by hiruma
รบกวน ขอตัวอย่างได้ไหมครับ

Posted: 28/01/2008 4:18 am
by icphysics
$a_str = explode(" ","hello boy my name is boy and love boy" );
$a_rep = array('***','yyy',***');
$i = 0;
foreach( $a_str as $str) {
if($a_rep==$str )
// แทนที่ ข้อความ ของคุรแบบ ปกติ
$i++;
}

ปล. เขียน สดๆ นะครับ ยังไม่ได้ debug ของเอาไปรันดูครับ
ท่านใดมีเจ้าของกระทู้ ได้วิธีดีกว่านี้ก็ ลงไว้ดูบ้างนะครับ มีอะไรก็มาแลกเปลี่ยนกันบ้างนะ........

Posted: 28/01/2008 4:28 am
by hiruma
ขอบคุณมากครับเด๋วลอง แปป :lol:

Posted: 28/01/2008 4:44 am
by hiruma
ยัง งง ครับผมแล้ว ผมจะได้คำตอบเป็นตัวแปรอะไรครับ

ในลูปผมต้องใช้คำสั่งประมาณไหนครับ
ชี้แนะด้วย

Posted: 28/01/2008 5:08 am
by hiruma
ได้แล้วครับขอบพระคุณมากๆครับ
ผมลองแก้ไขดูได้ code ดังนี้

$a_str = explode(" ","hello boy my name is boy and love boy" );
$a_rep = array('girl','jack','jib');
$compare="boy";
$i = 0;
foreach( $a_str as $str) {
if($compare==$str )
{
$num = count($a_rep) - 1;
srand ((double) microtime() * 1000000);
$randomtext = rand(0,$num);
$oneliner = $a_rep[$randomtext];
$str=str_replace("boy", $oneliner, $compare);
}
echo $str." ";
$i++;
}

มั่วจนได้
สุ่ม 3 ครั้งได้ผลลัพธ์ดังใจแล้วครับ
ครั้งที่ 1
hello girl my name is jib and love jack
ครั้งที่ 2
hello jack my name is jack and love girl
ครั้งที่ 3
hello girl my name is jib and love jack


ขอบคุณอีกครั้งที่ช่วยชี้ทางกระจ่างให้ครับผม

:lol: