การใช้ function foreach

สำหรับผู้ที่ เริ่มต้น Programming - PHP มีอะไร แนะนำ หรือข้อสงสัยต้องบอร์ด นี้ คนที่มีความรู้ แบ่งปันคนอื่นบ้างนะ ปัญหาการเขียนโปรแกรม แบบ OOP Session Cookies php network

Moderators: mindphp, ผู้ดูแลกระดาน

c_nan
PHP Jr. Member
PHP Jr. Member
Posts: 10
Joined: 10/04/2009 1:59 am

การใช้ function foreach

Post by c_nan »

foreach($keyword as $key=>$val) //foreach2
{
$strSQL = "SELECT * FROM stopword where sword = '$val[0]'";
$result = mysql_query($strSQL, $conn);
if(!$result)
{
die("ไม่มีคำ -- $val[0] -- " .mysql_error());
} //end if
else
{

while ($rs = mysql_fetch_row($result)) //mysql_fetch_row() คือฟังชั่นที่นำเอาค่าในตารางออกมาเป็นแถว
{
foreach ($rs as $field)
unset($keyword[$key]); // ลบสมาชิกตัวที่เจอทีละตัว นตำแหน่งที่กำหนด
} // end while
} // end else
// echo "<br>";
} // end foreach2
echo "<br>";
echo "<br>";

$arr4 = array_values($keyword);
print_r($arr4);

echo "<br>";
echo "<br>";

จากโค้ดตัวอย่างนี้ ถ้าเราต้องการแก้ไขจากที่ว่าถ้าพบคำไหนให้ตัดทิ้ง เปลี่ยนเป็นพบคำไหนให้เก็บไว้ เราต้องแก้ไขคำสั่งตรงส่วนไหนค่ะ และใช้คำสั่งว่าอย่างไร ต้องขอรบกวนช่วยแนะนำด้วยนะค่ะ คือไม่ทราบจิงๆ ว่าต้องใช้คำสั่งว่าอย่างไร ขอบคุณค่ะ
User avatar
secivon
PHP Full Member
PHP Full Member
Posts: 35
Joined: 24/03/2009 5:15 pm

Re: การใช้ function foreach

Post by secivon »

ลองอธิบายคร่าวๆ ได้ไหมครับว่า code ที่ว่ามีไว้ทำอะไร

กำลังสงสัยว่าทำไม loop structure ดูแปลกๆ :?:

ถ้ามี sample input data / output ได้จะดีมากเลยครับ
"อย่าเอาแต่โทษเด็ก ถ้าเด็กมันจะห่วย ดูตัวเองบ้างว่าทำบ้านเมืองไว้เป็นยังไง"
c_nan
PHP Jr. Member
PHP Jr. Member
Posts: 10
Joined: 10/04/2009 1:59 am

Re: การใช้ function foreach

Post by c_nan »

ตัวอย่างค่ะ คือ input แนะนำ|ที่พัก|ที่|เชียงใหม่
ทำการตัดสัญลักษณ์ | ออก ก็จะได้ แนะนำ ที่พัก ที่ เชียงใหม่ โดยจะเก็บไว้ใน array นะค่ะ
เมื่อได้ "แนะนำ ที่พัก ที่ เชียงใหม่" มาแล้ว ก็จะทำการตัดคำหยุดค่ะ โดยใช้คำสั่ง foreach ตรวจสอบทีละคำว่ามีคำหยุด (stopword) ถ้ามีให้ตัดทิ้ง ดังตัวอย่างโค้ดข้างบนที่โพสไว้ค่ะ แต่สิ่งที่เราต้องการทำคือ ไม่ได้ต้องการตัดคำหยุดเหมือนตัวอย่างโค้ดที่ให้ไป แต่ตรวจสอบว่ามีคำไหนปรากฎในฐานข้อมูลก็ให้เก็บไว้ แต่ถ้าไม่มีคำไหนก็ให้ผ่านไปงะค่ะ ที่เอาโค้ดมาให้ดูเพราะคิดว่าจะดัดแปลงมาใช้กับงานของเรา เพราะเห็นว่าน่าจะใช้ได้ แต่ไม่รู้จะแก้ไขยังไงงะค่ะ
รบกวนด้วยนะค่ะ ขอบคุณค่ะ
User avatar
secivon
PHP Full Member
PHP Full Member
Posts: 35
Joined: 24/03/2009 5:15 pm

Re: การใช้ function foreach

Post by secivon »

จริงๆ อยากเห็น $keyword มากกว่านะครับ เพราะเหมือนจะเป็น array 2 มิติ (หรือ $val[0] คือ character ตัวแรกเนี่ย? )

แล้วเท่าที่ดู foreach ในบรรทัดช่วง

Code: Select all

foreach ($rs as $field)
unset($keyword[$key]);
มันก็ไม่ได้ทำงานอะไรนี่นา จะมี foreach ไม่มีก็ไม่เกี่ยวกันเลย เพราะไม่มีการนำ $field ไปใช้




เอาเป็นว่า ผมลอง modify code เป็นอย่างนี้ละกัน

Code: Select all

<?
// initializing sample keywords
$keyword = array(
'0' => array('place' , '')
, '1' => array('house' , '')
);

reset($keyword); // make sure the array pointer start at the beginning of array
$search_keyword = array();
foreach( $keyword as $key => $item) {   // $item will be the same as your code's $val
	$search_keyword[] = mysql_real_escape_string($item[0]) ;   // <==> mysql_escape ($val[0]) prevent SQL injection 
}


// put all the keyword together and query the result at once 
$search_query = sprintf(' SELECT sword FROM stopword WHERE sword IN ("%s") ', implode('","',$search_keyword));
print $search_query; // try to see which SQL is executed?


// initialize the output array
$array_matched = array();
$result_set = mysql_query($search_query) or die(mysql_error());
while( $record = mysql_fetch_assoc($result_set)) {
	$array_matched[] = $record['sword']; // record is matched in stopword.sword
}


// output
print '<PRE>';
var_dump($array_matched);
print '</PRE>';
?>
"อย่าเอาแต่โทษเด็ก ถ้าเด็กมันจะห่วย ดูตัวเองบ้างว่าทำบ้านเมืองไว้เป็นยังไง"
c_nan
PHP Jr. Member
PHP Jr. Member
Posts: 10
Joined: 10/04/2009 1:59 am

Re: การใช้ function foreach

Post by c_nan »

โครงสร้าง database เป็นตามที่แนบไฟล์ไว้ค่ะ โดยกำหนดให้ word เป็นคีย์หลักค่ะ
<h3><span class="style1">[ Test Thai synonym database !!! ]</span></h3>
<p><br />
<span class="style2">----------------------------</span></p>
<br />


<p>
<?php
$hostname = "localhost";
$username = "root";
$password = "root";
$dbname = "testdb";
$conn = mysql_connect($hostname,$username,$password);
mysql_query('SET CHARACTER SET utf8'); //ให้อ่าน-เขียนภาษาไทยได้จร้า
mysql_query('SET NAMES utf8');

if(! $conn )
die("ไม่สามารถติดต่อกับ MySQL ได้");
mysql_select_db($dbname, $conn)
or die("ไม่สามารถเลือกใช้งานฐานข้อมูล $dbname ได้");

$phrase = "แนะนำ|ที่พัก|ที่|เชียงใหม่|ราคา|500|-|1000|บาท";
echo"phrase=".$phrase."<br>";

$keyword = explode("|",$phrase);
$keyword = array_filter($keyword); //เก็บคำไว้ใน array
echo "<br><br>";

echo "After explode | ได้ :";
print_r($keyword);
echo "<br><br>";

อันนี้เป็นโค้ดที่เขียนไว้แล้วค่ะ แต่สิ่งที่ต้องการต่อจากนี้คือ ต้องการให้โปรแกรมทำการตรวจสอบที่ละคำงะค่ะ ถ้าพบคำไหนที่ตรงกับฐานข้อมูลก็ให้เก็บไว้ คำไหนไม่พบก็ให้ผ่านไป ประมาณนี้งะค่ะ ซึ่งโดยส่วนตัวแล้วเป็นคนเขียนโปรแกรมไม่เป็นก็เลยไม่รู้ว่าจะต้องเขียนต่อยังไง ที่เขียนข้างบนมาได้ก็เพราะเอาของชาวบ้านมาแก้ไขปรับปรุงค่ะ ยังไงช่วยหน่อยนะค่ะ ขอบคุณมากๆ ค่ะ
Attachments
ตัวอย่าง database ค่ะ
ตัวอย่าง database ค่ะ
11.jpg (22.55 KiB) Viewed 2235 times
User avatar
secivon
PHP Full Member
PHP Full Member
Posts: 35
Joined: 24/03/2009 5:15 pm

Re: การใช้ function foreach

Post by secivon »

อันนี้เป็นโค้ดที่เขียนไว้แล้วค่ะ แต่สิ่งที่ต้องการต่อจากนี้คือ ต้องการให้โปรแกรมทำการตรวจสอบที่ละคำงะค่ะ ถ้าพบคำไหนที่ตรงกับฐานข้อมูลก็ให้เก็บไว้ คำไหนไม่พบก็ให้ผ่านไป ประมาณนี้งะค่ะ ซึ่งโดยส่วนตัวแล้วเป็นคนเขียนโปรแกรมไม่เป็นก็เลยไม่รู้ว่าจะต้องเขียนต่อ ยังไง ที่เขียนข้างบนมาได้ก็เพราะเอาของชาวบ้านมาแก้ไขปรับปรุงค่ะ ยังไงช่วยหน่อยนะค่ะ ขอบคุณมากๆ ค่ะ
คือการเพิ่ม frequency + 1? หรือเปล่าครับ

Code: Select all

<?
reset($keyword); // make sure the array pointer start at the beginning of array
$search_keyword = array();
foreach( $keyword as $key => $item) {   // $item will be the same as your code's $val
   $search_keyword[] = mysql_real_escape_string($item[0]) ;   // <==> mysql_escape ($val[0]) prevent SQL injection
}


// put all the keyword together and query the result at once
$update_query = sprintf(' UPDATE sword SET frequency = frequency + 1 WHERE sword IN ("%s") ', implode('","',$search_keyword));
mysql_query($update_query);

?>
เอ่อ คราวหลังถ้าเขียนโปรแกรมไม่เป็น ยิ่งต้องรีบบอกให้รู้นะครับ
เพราะผมปกติคุยตอนทำงานก็ใช้แต่ code คุยกัน อธิบาย process ให้ชาวบ้านไม่ค่อยเป็น :mrgreen:
"อย่าเอาแต่โทษเด็ก ถ้าเด็กมันจะห่วย ดูตัวเองบ้างว่าทำบ้านเมืองไว้เป็นยังไง"
c_nan
PHP Jr. Member
PHP Jr. Member
Posts: 10
Joined: 10/04/2009 1:59 am

Re: การใช้ function foreach

Post by c_nan »

ค่ะ วันหลังจะแจ้งก่อนล่วงหน้าเลยว่าเขียนโปรแกรมไม่เป็น (อายจัง) แต่ไงก็ขอบคุณนะค่ะ
frequency ในที่นี้ คือ ความถี่ของคำแต่ละคำที่ปรากฎในเว็บไซต์ค่ะ โดยจะทำการเก็บรวบรวมเอง เป็นแบบ manual ค่ะ
ความจิงก็ยังมีอีกหลายโมดูลที่ต้องทำ ถ้ามีปัญหาในด้านอื่นๆ จะรบกวนสอบถามอีกนะค่ะ ขอบคุณมากค่ะ
c_nan
PHP Jr. Member
PHP Jr. Member
Posts: 10
Joined: 10/04/2009 1:59 am

Re: การใช้ function foreach

Post by c_nan »

ขอโทษนะค่ะ ขอรบกวนอีกที เอาโค้ดนี้
<?
reset($keyword); // make sure the array pointer start at the beginning of array
$search_keyword = array();
foreach( $keyword as $key => $item) { // $item will be the same as your code's $val
$search_keyword[] = mysql_real_escape_string($item[0]) ; // <==> mysql_escape ($val[0]) prevent SQL injection
}


// put all the keyword together and query the result at once
$update_query = sprintf(' UPDATE sword SET frequency = frequency + 1 WHERE sword IN ("%s") ', implode('","',$search_keyword));
mysql_query($update_query);

?>

ต่อจากโค้ดข้างล่างนี้เลยหรือเปล่าคะ งง :(
<?php
$hostname = "localhost";
$username = "root";
$password = "root";
$dbname = "testdb";
$conn = mysql_connect($hostname,$username,$password);
mysql_query('SET CHARACTER SET utf8'); //ให้อ่าน-เขียนภาษาไทยได้จร้า
mysql_query('SET NAMES utf8');

if(! $conn )
die("ไม่สามารถติดต่อกับ MySQL ได้");
mysql_select_db($dbname, $conn)
or die("ไม่สามารถเลือกใช้งานฐานข้อมูล $dbname ได้");

$phrase = "แนะนำ|ที่พัก|ที่|เชียงใหม่|ราคา|500|-|1000|บาท";
echo"phrase=".$phrase."<br>";

$keyword = explode("|",$phrase);
$keyword = array_filter($keyword); //เก็บคำไว้ใน array
echo "<br><br>";

echo "After explode | ได้ :";
print_r($keyword);
echo "<br><br>";
Post Reply
  • Similar Topics
    Replies
    Views
    Last post

Return to “Programming - PHP”

Who is online

Users browsing this forum: No registered users and 15 guests