ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programmingสอบถามการ php textarea split line แบบ multi split
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: สอบถามการ php textarea split line แบบ multi split  (อ่าน 642 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
Mrpoohling
ก๊วนเสียว
*

พลังน้ำใจ: 6
ออฟไลน์ ออฟไลน์

กระทู้: 250



ดูรายละเอียด เว็บไซต์
« เมื่อ: 27 กุมภาพันธ์ 2017, 07:28:13 »

ตัวอย่าง textarea รับค่ามาแบบนี้ครับ

$textarea ="5658745##category=10001##price=1000";
โดยให้สามารถใส่สลับแบบนี่ก็ได้
$textarea ="5658745##price=1000##category=10001";

และต้องการให้แยกเป็นแบบนี้

5658745 คือ id
10001 คือ category
1000 คือ price

----
ผมลองใช้ explode('##', $textarea); มาช่วยแต่เวลา สลับ category กับ price Array มันจะอ่านไม่ตรง

 Tongue

รบกวนด้วยครับผม




« แก้ไขครั้งสุดท้าย: 27 กุมภาพันธ์ 2017, 07:32:24 โดย Mrpoohling » บันทึกการเข้า

pinkam0327
ก๊วนเสียว
*

พลังน้ำใจ: 31
ออฟไลน์ ออฟไลน์

กระทู้: 441



ดูรายละเอียด
« ตอบ #1 เมื่อ: 27 กุมภาพันธ์ 2017, 09:01:36 »

preg_match น่าจะพอช่วยได้นะครับ ลองเล่นดูครับ http://www.phpliveregex.com/

โค๊ด:
preg_match("/price=([0-9]+)/", $input_line, $output_array);
preg_match("/category=([0-9]+)/", $input_line, $output_array);
บันทึกการเข้า
Mrpoohling
ก๊วนเสียว
*

พลังน้ำใจ: 6
ออฟไลน์ ออฟไลน์

กระทู้: 250



ดูรายละเอียด เว็บไซต์
« ตอบ #2 เมื่อ: 27 กุมภาพันธ์ 2017, 09:25:24 »

preg_match น่าจะพอช่วยได้นะครับ ลองเล่นดูครับ http://www.phpliveregex.com/

โค๊ด:
preg_match("/price=([0-9]+)/", $input_line, $output_array);
preg_match("/category=([0-9]+)/", $input_line, $output_array);


ขอบคุณคัรบ เด่วลองแปป
บันทึกการเข้า

maneemeena
คนรักเสียว
*

พลังน้ำใจ: 8
ออฟไลน์ ออฟไลน์

กระทู้: 189



ดูรายละเอียด
« ตอบ #3 เมื่อ: 27 กุมภาพันธ์ 2017, 09:42:38 »

ใช้ preg_match แบบด้านบนโค้ดจะสั้นกว่าครับ เพราะถ้าใช้ explode คุณต้องมาเช็คอีกว่า index ที่ 1 และ 2 ของค่าที่แตกออกมาเป็นอะไร และต้องมา explode('=',$data) อีก ยาวหลายบรรทัดเลย
บันทึกการเข้า
Mrpoohling
ก๊วนเสียว
*

พลังน้ำใจ: 6
ออฟไลน์ ออฟไลน์

กระทู้: 250



ดูรายละเอียด เว็บไซต์
« ตอบ #4 เมื่อ: 27 กุมภาพันธ์ 2017, 10:48:59 »

ใช้ preg_match แบบด้านบนโค้ดจะสั้นกว่าครับ เพราะถ้าใช้ explode คุณต้องมาเช็คอีกว่า index ที่ 1 และ 2 ของค่าที่แตกออกมาเป็นอะไร และต้องมา explode('=',$data) อีก ยาวหลายบรรทัดเลย

เจอปัญหาใหม่ครับเมื่อลองเพิ่ม ##name=Item's id 3.0 size 2*100 ,NEW
แล้วดึงไม่ได้ครับ

ผมลองมาเทส

$T="Item's id 3.0 size 2*100 ,NEW";

preg_match("/([a-zA-Z0-9\-\.]+)/",$T, $output);

echo $output[0]."<br>";

ออกแค่ Item -*-
บันทึกการเข้า

pinkam0327
ก๊วนเสียว
*

พลังน้ำใจ: 31
ออฟไลน์ ออฟไลน์

กระทู้: 441



ดูรายละเอียด
« ตอบ #5 เมื่อ: 27 กุมภาพันธ์ 2017, 11:20:46 »

ใช้ preg_match แบบด้านบนโค้ดจะสั้นกว่าครับ เพราะถ้าใช้ explode คุณต้องมาเช็คอีกว่า index ที่ 1 และ 2 ของค่าที่แตกออกมาเป็นอะไร และต้องมา explode('=',$data) อีก ยาวหลายบรรทัดเลย

เจอปัญหาใหม่ครับเมื่อลองเพิ่ม ##name=Item's id 3.0 size 2*100 ,NEW
แล้วดึงไม่ได้ครับ

ผมลองมาเทส

$T="Item's id 3.0 size 2*100 ,NEW";

preg_match("/([a-zA-Z0-9\-\.]+)/",$T, $output);

echo $output[0]."<br>";

ออกแค่ Item -*-
โค๊ด:

preg_match("/name=(.*)(?<!#)/", "##name=Item's id 3.0 size 2*100 ,NEW##", $output_array);

#OUTPUT
array(2
0 => name=Item's id 3.0 size 2*100 ,NEW
1 => Item's id 3.0 size 2*100 ,NEW
)
บันทึกการเข้า
Mrpoohling
ก๊วนเสียว
*

พลังน้ำใจ: 6
ออฟไลน์ ออฟไลน์

กระทู้: 250



ดูรายละเอียด เว็บไซต์
« ตอบ #6 เมื่อ: 27 กุมภาพันธ์ 2017, 12:03:07 »

ใช้ preg_match แบบด้านบนโค้ดจะสั้นกว่าครับ เพราะถ้าใช้ explode คุณต้องมาเช็คอีกว่า index ที่ 1 และ 2 ของค่าที่แตกออกมาเป็นอะไร และต้องมา explode('=',$data) อีก ยาวหลายบรรทัดเลย

เจอปัญหาใหม่ครับเมื่อลองเพิ่ม ##name=Item's id 3.0 size 2*100 ,NEW
แล้วดึงไม่ได้ครับ

ผมลองมาเทส

$T="Item's id 3.0 size 2*100 ,NEW";

preg_match("/([a-zA-Z0-9\-\.]+)/",$T, $output);

echo $output[0]."<br>";

ออกแค่ Item -*-
โค๊ด:

preg_match("/name=(.*)(?<!#)/", "##name=Item's id 3.0 size 2*100 ,NEW##", $output_array);

#OUTPUT
array(2
0 => name=Item's id 3.0 size 2*100 ,NEW
1 => Item's id 3.0 size 2*100 ,NEW
)

ไม่ผ่านครับ

preg_match("/name=(.*)(?<!#)/", "##name=Item's id 3.0 size 2*100 ,NEW##category=10001##price=1000", $output_array);

มันดึงมาหมดเลย

Item's id 3.0 size 2*100 ,NEW##category=10001##price=1000

ต้องการแค่ Item's id 3.0 size 2*100 ,NEW ครับ

บันทึกการเข้า

maneemeena
คนรักเสียว
*

พลังน้ำใจ: 8
ออฟไลน์ ออฟไลน์

กระทู้: 189



ดูรายละเอียด
« ตอบ #7 เมื่อ: 27 กุมภาพันธ์ 2017, 12:23:32 »

ผมแนะนำให้ จขกท ศึกษาเรื่อง regex ด้วยครับ

โค๊ด:
(?<!) Negative look behind assertion (?<!foo)bar matches bar when not preceded by foo

แก้แพทเทิร์นนิดเดียวก็ได้แล้วครับ

โค๊ด:
array (size=2)
  0 => string 'name=Item's id 3.0 size 2*100 ,NEW##' (length=36)
  1 => string 'Item's id 3.0 size 2*100 ,NEW' (length=29)
บันทึกการเข้า
pinkam0327
ก๊วนเสียว
*

พลังน้ำใจ: 31
ออฟไลน์ ออฟไลน์

กระทู้: 441



ดูรายละเอียด
« ตอบ #8 เมื่อ: 27 กุมภาพันธ์ 2017, 13:31:55 »

ใช้ preg_match แบบด้านบนโค้ดจะสั้นกว่าครับ เพราะถ้าใช้ explode คุณต้องมาเช็คอีกว่า index ที่ 1 และ 2 ของค่าที่แตกออกมาเป็นอะไร และต้องมา explode('=',$data) อีก ยาวหลายบรรทัดเลย

เจอปัญหาใหม่ครับเมื่อลองเพิ่ม ##name=Item's id 3.0 size 2*100 ,NEW
แล้วดึงไม่ได้ครับ

ผมลองมาเทส

$T="Item's id 3.0 size 2*100 ,NEW";

preg_match("/([a-zA-Z0-9\-\.]+)/",$T, $output);

echo $output[0]."<br>";

ออกแค่ Item -*-
โค๊ด:

preg_match("/name=(.*)(?<!#)/", "##name=Item's id 3.0 size 2*100 ,NEW##", $output_array);

#OUTPUT
array(2
0 => name=Item's id 3.0 size 2*100 ,NEW
1 => Item's id 3.0 size 2*100 ,NEW
)

ไม่ผ่านครับ

preg_match("/name=(.*)(?<!#)/", "##name=Item's id 3.0 size 2*100 ,NEW##category=10001##price=1000", $output_array);

มันดึงมาหมดเลย

Item's id 3.0 size 2*100 ,NEW##category=10001##price=1000

ต้องการแค่ Item's id 3.0 size 2*100 ,NEW ครับ



preg_match("/name=[^#]*/", $input_line, $output_array);
บันทึกการเข้า
Mrpoohling
ก๊วนเสียว
*

พลังน้ำใจ: 6
ออฟไลน์ ออฟไลน์

กระทู้: 250



ดูรายละเอียด เว็บไซต์
« ตอบ #9 เมื่อ: 27 กุมภาพันธ์ 2017, 13:45:27 »

ใช้ preg_match แบบด้านบนโค้ดจะสั้นกว่าครับ เพราะถ้าใช้ explode คุณต้องมาเช็คอีกว่า index ที่ 1 และ 2 ของค่าที่แตกออกมาเป็นอะไร และต้องมา explode('=',$data) อีก ยาวหลายบรรทัดเลย

เจอปัญหาใหม่ครับเมื่อลองเพิ่ม ##name=Item's id 3.0 size 2*100 ,NEW
แล้วดึงไม่ได้ครับ

ผมลองมาเทส

$T="Item's id 3.0 size 2*100 ,NEW";

preg_match("/([a-zA-Z0-9\-\.]+)/",$T, $output);

echo $output[0]."<br>";

ออกแค่ Item -*-
โค๊ด:

preg_match("/name=(.*)(?<!#)/", "##name=Item's id 3.0 size 2*100 ,NEW##", $output_array);

#OUTPUT
array(2
0 => name=Item's id 3.0 size 2*100 ,NEW
1 => Item's id 3.0 size 2*100 ,NEW
)

ไม่ผ่านครับ

preg_match("/name=(.*)(?<!#)/", "##name=Item's id 3.0 size 2*100 ,NEW##category=10001##price=1000", $output_array);

มันดึงมาหมดเลย

Item's id 3.0 size 2*100 ,NEW##category=10001##price=1000

ต้องการแค่ Item's id 3.0 size 2*100 ,NEW ครับ



preg_match("/name=[^#]*/", $input_line, $output_array);

ขอบคุณมากครับได้แล้วววว  Tongue Tongue
บันทึกการเข้า

หน้า: [1]   ขึ้นบน
พิมพ์