php语法的问题,实现两个关联数组的key值得比较-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

php语法的问题,实现两个关联数组的key值得比较

小旋风柴进 2016-03-06 13:49:07 2324

在下原来是做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
错误,是不是我配置的问题?请帮我看下

SQL 开发框架 .NET PHP Android开发 C++
分享到
取消 提交回答
全部回答(1)
  • 小旋风柴进
    2019-07-17 18:54:30

    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 条吧

    0 0
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程