ThaiSEOBoard.com

พัฒนาเว็บไซต์ => Programming => ข้อความที่เริ่มโดย: Mrpoohling ที่ 27 กุมภาพันธ์ 2017, 07:28:13



หัวข้อ: สอบถามการ php textarea split line แบบ multi split
เริ่มหัวข้อโดย: Mrpoohling ที่ 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 มันจะอ่านไม่ตรง

 :P

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






หัวข้อ: Re: สอบถามการ php textarea split line แบบ multi split
เริ่มหัวข้อโดย: pinkam0327 ที่ 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);


หัวข้อ: Re: สอบถามการ php textarea split line แบบ multi split
เริ่มหัวข้อโดย: Mrpoohling ที่ 27 กุมภาพันธ์ 2017, 09:25:24
preg_match น่าจะพอช่วยได้นะครับ ลองเล่นดูครับ [url]http://www.phpliveregex.com/[/url]

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


ขอบคุณคัรบ เด่วลองแปป


หัวข้อ: Re: สอบถามการ php textarea split line แบบ multi split
เริ่มหัวข้อโดย: maneemeena ที่ 27 กุมภาพันธ์ 2017, 09:42:38
ใช้ preg_match แบบด้านบนโค้ดจะสั้นกว่าครับ เพราะถ้าใช้ explode คุณต้องมาเช็คอีกว่า index ที่ 1 และ 2 ของค่าที่แตกออกมาเป็นอะไร และต้องมา explode('=',$data) อีก ยาวหลายบรรทัดเลย


หัวข้อ: Re: สอบถามการ php textarea split line แบบ multi split
เริ่มหัวข้อโดย: Mrpoohling ที่ 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 -*-


หัวข้อ: Re: สอบถามการ php textarea split line แบบ multi split
เริ่มหัวข้อโดย: pinkam0327 ที่ 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
)


หัวข้อ: Re: สอบถามการ php textarea split line แบบ multi split
เริ่มหัวข้อโดย: Mrpoohling ที่ 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 ครับ



หัวข้อ: Re: สอบถามการ php textarea split line แบบ multi split
เริ่มหัวข้อโดย: maneemeena ที่ 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)


หัวข้อ: Re: สอบถามการ php textarea split line แบบ multi split
เริ่มหัวข้อโดย: pinkam0327 ที่ 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);


หัวข้อ: Re: สอบถามการ php textarea split line แบบ multi split
เริ่มหัวข้อโดย: Mrpoohling ที่ 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);

ขอบคุณมากครับได้แล้วววว  :P :P