//////////////////// Function to fetch result like google /////////////////////
//
// This function is written by Mohd Khairulnizam Bin Md Dahari (kay_rules)
// mailto: kay_rules@NOSPAM.time.net.my (please remove 'NOSPAM')
//
// eg penggunaan :
// $haystack = 'Isikan tempat kosong yang berkenaan untuk mengirimkan tulisan
// anda dan elakkan kesalahan ejaan. Untuk makluman, tidak semua
// kiriman akan disiarkan dimuka utama. Tulisan anda akan disemak dan
// disunting terlebih dahulu untuk memastikan kesesuaian ayat dan isi
// kandungannya.';
// $needle = "anda";
// fetchstr($haystack,$needle); // call this function
///////////////////////////////////////////////////////////////////////////////
function fetchstr($haystack,$needle){
///////////////////////////////////////////////////////////
// setiap $needle dan $haystack
// akan dijadikan lowercase
///////////////////////////////////////////////////////////
$needle = strtolower($needle);
$haystack = strtolower($haystack);
///////////////////////////////////////////////////////////
// setiap newline, tab dan character yang selain dari
// alphanumeric akan di replace kan dengan aksara '-' untuk
// memudahkan arahan 'strpos' mengetahui kedudukan sebenar
// keyword ($needle) yang hendak di cari.
//
// eg. $haystack: "nama saya adalah Ali_Baba"
// akan menjadi :
// -nama-saya-adalah-Ali-Baba-
//
// eg. $needle: "adalah"
// akan menjadi :
// [adalah]
///////////////////////////////////////////////////////////
$newstack = ereg_replace("(\r\n|\n|\r|\t)", " ",$haystack);
$newstack2 = ereg_replace("[^[:alnum:]]", "-", $newstack);
$prnt = eregi_replace ("-$needle-","[$needle]",$newstack2);
// ketahui jumlah $needle dalam data
$arkCnt = substr_count($newstack2, "-$needle-");
$i=0;
$bufStart = 0;
$bufLast = 0;
///////////////////////////////////////////////////////////
// set jumlah print output 80 aksara sahaja
///////////////////////////////////////////////////////////
$end = 80;
///////////////////////////////////////////////////////////
// ketahui kedudukan $needle dalam data
///////////////////////////////////////////////////////////
$position = strpos($prnt, "[$needle]");
///////////////////////////////////////////////////////////
// untuk setiap jumlah $needle yang wujud, kita masukkan
// kedudukan 'mula' dan 'akhir' untuk keratan data yang
// hanya mempunyai $needle yang kita cari. kedudukannya
// akan disimpan dalam array:
//
// eg: mula - $artm[$i][0]
// akhir - $artm[$i][1]
//
// eg: keyword carian : "adalah"
// - katakan perkataan ini terdapat pada kedudukan
// ke-144 dalam $haystack. jadi:
// $artm[$i][0] = 144 dan
// $artm[$i][1] = 144 + 80
///////////////////////////////////////////////////////////
while($arkCnt>0){
$start = $position - 30;
if($start < 0) $start = 0;
$last = $start + $end;
$artm[$i][0] += $artm[$i-1][1] + $start;
$artm[$i][1] = $artm[$i][0] + $end;
$cutone = substr($prnt, $start, $end);
$prnt = substr($prnt, $last);
$position = strpos($prnt, "[$needle]");
$arkCnt = substr_count($prnt, "[$needle]");
$bufStart = $start;
$bufLast = $last;
$i++;
}
///////////////////////////////////////////////////////////
// tidak benarkan function ini papar lebih dari
// 3 keratan data untuk setiap $needle
///////////////////////////////////////////////////////////
if(count($artm)>3){
$choose = 3;
}else{
$choose = count($artm);
}
///////////////////////////////////////////////////////////
// akhir sekali, paparkan output
///////////////////////////////////////////////////////////
for($j=0; $j<$choose; $j++){
if($j==0) echo " ... ";
$stt = $artm[$j][0];
$cutone = substr($newstack, $stt,$end);
$output = eregi_replace ("[^[:alnum:]]{1,2}($needle)[^[:alnum:]]"," $needle ",$cutone);
echo $output." ... ";
}
} // end function
?>