在下原来是做c++的,最近公司需要,做了一个php的web网站程序,用的php+mysql+jQuery+css。
现在我需要实现一个功能就是在一篇文章的最后显示与这片文章标题类似的文章的推荐,并附带链接。
我现在怀疑是不是语法的问题造成的,请帮我看看,谢谢
我的代码如下:
<?php
/*
* 示例代码:
* 功能:完成相似关键词的查找
*/
$demo_title = $con ['info_title'];
//echo $demo_title;
$result = mysql_query("SELECT * FROM 表名 where cate_id='12' or cate_id='13'");
$new_array =array();
$count = mysql_num_rows($result);//结果条数
while($row = mysql_fetch_array($result))
{
if($row['info_status']==0)
{
//echo $row['info_title'];
$temp = $row['info_id'];
//echo $temp;
$new_array[$temp]=$row['info_title'];//数组赋值
//echo $new_array[$temp];
//echo ('<br/>');
}
//$demo_titile = $row['info_title'];
}
$resarray = getSimilars($demo_title, $new_array);
foreach ($resarray as $v)
{//对结果列表进行html输出
echo('<a href="/index.php?tpl=content&id='.$v['info_id'].'">'.$v['info_title'].'</a>');
echo("<br />");
}
/*
* @param $title 被比较的字符串
* @param $arr_title 待比较的字符串数组,该数组为关联数组
* */
function getSimilars($title, $arr_title) {
$num = 0;
$ret_array = array();
foreach ($arr_title as $key=>$value)
{
//echo $title;echo ' ';echo $key;
//echo '<br />';
$percent = similar_text($value, $title);//相似百分比,整数形式
//echo $percent;echo ('<br/>');
$temp_array[$key] = $percent;//构建新数组
//echo $temp_array[$key]; echo '<br />';
}
//对$temp_array数组进行排序;
arsort($temp_array);
//echo $temp_array[$key]; echo '<br />';
//根据temp_array的$key值进行查找并创建新数组
$times = 0;
foreach($temp_array as $key=>$value)
{//似乎该循环只走了第一遍,后面就不走了?
if($times<6)
{//目前只推荐6条
//echo $key;echo " ";echo $value;echo '<br />';
$search = true;
if($search == true)
foreach($arr_title as $tempkey => $tempvalue)
{
echo $key;echo " ";echo $tempkey;echo '<br />';
if($key==$arr_title){//似乎这个if判断没有起到任何作用
echo "找到目标:";echo $key;echo " ";echo $tempkey;echo '<br />';
//echo $tempkey;echo " ";echo $tempvalue;echo '<br />';
$temp=$tempvalue;
$ret_array[$key]=$temp;//构建新数组
echo "插入目标:";echo $ret_array[key];echo " ";echo '<br />';
//next($temp_array);//指针下移
$times ++;
$search = false;
}
}
reset($arr_title);
}
}
foreach(Sret_array as $key => $value)
{
//echo $key;echo " ";echo $value; echo "<br />";
}
return $ret_array;
}
// $title当前标题,$arrayTitle为需要查找的数组
function getSimilar($title, $arr_title) {
$arr_len = count ( $arr_title );
for($i = 0; $i <= ($arr_len - 1); $i ++) {
// 取得两个字符串相似的字节数
$arr_similar [$i] = similar_text ( $arr_title [$i], $title );
}
arsort ( $arr_similar ); // 按照相似的字节数由高到低排序
reset ( $arr_similar ); // 将指针移到数组的第一单元
$index = 0;
foreach ( $arr_similar as $old_index => $similar ) {
$new_title_array [$index] = $arr_title [$old_index];
$index ++;
}
return $new_title_array;
}
?>
另外,我的eclipse单步调试不了,总是还没进到我要调试的代码就开始报
XDEBUG_SESSION_STOP_NO_EXEC=ECLIPSE_DBGP&KEY=14229459395503
错误,是不是我配置的问题?请帮我看下
1、similar_text 返回的是匹配的字符个数,相似度(百分比)应从第3个参数得到
similar_text($value, $title, $percent);
2、similar_text 只适合西文判断,对于中文这类多字节字符应以按字拆分成数组,然后取交集计算为宜
3、第一步取得相似度数组后,排序用 array_multisort($temp_array, $arr_title)
就可以了
这样虽然会令 $arr_title 丢失关联键,但 $arr_title = array_combine(keys(temp_array), $arr_title)
就可找回
4、返回时用 array_slice($arr_title, 0, 6, true)); //你好像是要前 6 条吧
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。