循环对比数据,返回当前数据的序号

huige728 2018-05-09 03:16:28

function bijiao($biaoti,$key){
$a=1;
$b=1;
foreach($key as $key_s){
$a++;
$key_list=$key_s;

if($key_list!=""){
echo "[$biaoti]==[$key_list] == <br>\r\n";
$ok=stristr($biaoti,$key_list);
if($ok){
$b++;
//echo "$b <br>\r\n";
}
}
}

return $b;
}


拿关键字去匹配所以的标题,如果成功,就返回标题的序号,但是循环的时候除了第一个成功后,数据就不动了,都是1.

...全文
764 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
木秀猿林 2018-05-12
  • 打赏
  • 举报
回复
引用 22 楼 huige728 的回复:
谢谢,问题我已经想到解决方法了,分给你,有兴趣的话,可以帮我看下这个sql的问题吗?
啥问题?
xuzuning 2018-05-11
  • 打赏
  • 举报
回复
错误的条件是不可能得到正确的结果的 从代码上看 function bijiao($biaoti,$key){ 中 $key 是数组,而 $biaoti 的单值 单值怎么可能出现行号呢?非要有,那就是 1,永远的 1. 除非将他拆分成数组
木秀猿林 2018-05-11
  • 打赏
  • 举报
回复
引用 18 楼 w6248117 的回复:
我试试了,发现还是没有获得序号

function bijiao($biaoti,$key){
    foreach($key as $k => $val){         
		//print($k."=>".$val.";");
		$key_list=$val;
		//echo '$key_list是',gettype($key_list),'型','<br />';
		
		if($biaoti!="" && !empty($key)){
			echo "[$biaoti]==[$key_list] == ";
			$ok=stristr($biaoti,$key_list);
			if($ok){
               return $k+1;
            }
			
		}	
    }
	return 0;
}
你这还有个问题,如果你的标题数组不止50个咋办?另外你说的数组去重,没有输出是什么意思?
huige728 2018-05-11
  • 打赏
  • 举报
回复
引用 20 楼 w6248117 的回复:
你这还有个问题,如果你的标题数组不止50个咋办?另外你说的数组去重,没有输出是什么意思?
谢谢,问题我已经想到解决方法了,分给你,有兴趣的话,可以帮我看下这个sql的问题吗?
huige728 2018-05-10
  • 打赏
  • 举报
回复
引用 14 楼 w6248117 的回复:
那你的代码应该是
function bijiao($biaoti_list,$key){
foreach($key as $k => $biaoti){
if($biaoti!="" && !empty($key)){
$ok=stristr($biaoti,$key);
if($ok){
return $k+1;
}
}
}
return 0;
}
$biaoti_list这个是你从数据库中排序查询出来的标题数组,$key是你的关键字字符串,不能是数组。然后匹配成功之后直接返回序号。循环结束没有找到匹配项返回0;


我试试了,发现还是没有获得序号


function bijiao($biaoti,$key){
foreach($key as $k => $val){
//print($k."=>".$val.";");
$key_list=$val;
//echo '$key_list是',gettype($key_list),'型','<br />';

if($biaoti!="" && !empty($key)){
echo "[$biaoti]==[$key_list] == ";
$ok=stristr($biaoti,$key_list);
if($ok){
return $k+1;
}

}
}
return 0;
}

木秀猿林 2018-05-10
  • 打赏
  • 举报
回复
引用 13 楼 huige728 的回复:
就是你说的这个意思
那你的代码应该是 function bijiao($biaoti_list,$key){ foreach($key as $k => $biaoti){ if($biaoti!="" && !empty($key)){ $ok=stristr($biaoti,$key); if($ok){ return $k+1; } } } return 0; } $biaoti_list这个是你从数据库中排序查询出来的标题数组,$key是你的关键字字符串,不能是数组。然后匹配成功之后直接返回序号。循环结束没有找到匹配项返回0;
huige728 2018-05-10
  • 打赏
  • 举报
回复
引用 12 楼 w6248117 的回复:
[quote=引用 11 楼 huige728 的回复:] $b是标题的序号
但是从你的代码中看,你的$b是匹配成功加一的啊!这怎么可能跟数据库的序号对应起来呢?(比如你的标题数组中第一个匹配不成功,数据库的序号应该是1吧!然后第二个匹配也不成功,数据库序号应该是2吧!然后你第三个标题匹配成功了,数据库的序号应该是3吧!但是你的$b只会返回2吧!而且$b应该从0开始。不知道是不是我对你的需求理解有错?)[/quote] 就是你说的这个意思
木秀猿林 2018-05-10
  • 打赏
  • 举报
回复
引用 11 楼 huige728 的回复:
$b是标题的序号
但是从你的代码中看,你的$b是匹配成功加一的啊!这怎么可能跟数据库的序号对应起来呢?(比如你的标题数组中第一个匹配不成功,数据库的序号应该是1吧!然后第二个匹配也不成功,数据库序号应该是2吧!然后你第三个标题匹配成功了,数据库的序号应该是3吧!但是你的$b只会返回2吧!而且$b应该从0开始。不知道是不是我对你的需求理解有错?)
huige728 2018-05-10
  • 打赏
  • 举报
回复
引用 10 楼 w6248117 的回复:
[quote=引用 9 楼 huige728 的回复:] 我是想法是把标题数据取出来,把标题数据按数据库的顺序进行排序,在用关键字去匹配,如果成功,则返回该标题的序号。现在突然想到,多关键字下 还有一个去重的问题...
你这个函数写的貌似不是返回序号而是返回匹配的次数吧![/quote] $b是标题的序号
木秀猿林 2018-05-10
  • 打赏
  • 举报
回复
引用 9 楼 huige728 的回复:
我是想法是把标题数据取出来,把标题数据按数据库的顺序进行排序,在用关键字去匹配,如果成功,则返回该标题的序号。现在突然想到,多关键字下 还有一个去重的问题...
你这个函数写的貌似不是返回序号而是返回匹配的次数吧!
huige728 2018-05-10
  • 打赏
  • 举报
回复
引用 7 楼 w6248117 的回复:
这个3的原因是因为你的$b的初始值不在for循环里面啊!你的每一个关键字去匹配都应该初始化一下$b,然后返回的也应该是每个关键字对应的数量。返回的是一个数组,而不是一个$b数值;
我是想法是把标题数据取出来,把标题数据按数据库的顺序进行排序,在用关键字去匹配,如果成功,则返回该标题的序号。现在突然想到,多关键字下 还有一个去重的问题...
木秀猿林 2018-05-10
  • 打赏
  • 举报
回复
引用 7 楼 w6248117 的回复:
[quote=引用 6 楼 huige728 的回复:] [quote=引用 5 楼 w6248117 的回复:] [quote=引用 4 楼 huige728 的回复:] [quote=引用 3 楼 w6248117 的回复:] [quote=引用 2 楼 huige728 的回复:] [quote=引用 1 楼 w6248117 的回复:] 你这只有第一条数据符合条件返回成功!所以就只有只会执行加一的操作啊!
那我要怎么修改才能让它往下走,并循环筛选出出其他数据?[/quote] 你在调用函数bijiao()的时候第二个参数$key传的是什么?[/quote] 参数$key(数组)是我在输入框输入的搜索关键字,多个关键字我拆分成数组了。[/quote] 你输入多个关键字然后打印一下你的$key看看。[/quote] 这是结果,好像多个关键字也出错了,出现的第一条数据的返回序号应该是2(表中第2行的数据)而不是3 [/quote] 这个3的原因是因为你的$b的初始值不在for循环里面啊!你的每一个关键字去匹配都应该初始化一下$b,然后返回的也应该是每个关键字对应的数量。返回的是一个数组,而不是一个$b数值;[/quote] 你说一下你的需求吧!感觉你这个方法并没有问题,而是你实现的效果和你的需求不一致。
木秀猿林 2018-05-10
  • 打赏
  • 举报
回复
引用 6 楼 huige728 的回复:
[quote=引用 5 楼 w6248117 的回复:] [quote=引用 4 楼 huige728 的回复:] [quote=引用 3 楼 w6248117 的回复:] [quote=引用 2 楼 huige728 的回复:] [quote=引用 1 楼 w6248117 的回复:] 你这只有第一条数据符合条件返回成功!所以就只有只会执行加一的操作啊!
那我要怎么修改才能让它往下走,并循环筛选出出其他数据?[/quote] 你在调用函数bijiao()的时候第二个参数$key传的是什么?[/quote] 参数$key(数组)是我在输入框输入的搜索关键字,多个关键字我拆分成数组了。[/quote] 你输入多个关键字然后打印一下你的$key看看。[/quote] 这是结果,好像多个关键字也出错了,出现的第一条数据的返回序号应该是2(表中第2行的数据)而不是3 [/quote] 这个3的原因是因为你的$b的初始值不在for循环里面啊!你的每一个关键字去匹配都应该初始化一下$b,然后返回的也应该是每个关键字对应的数量。返回的是一个数组,而不是一个$b数值;
huige728 2018-05-10
  • 打赏
  • 举报
回复
引用 5 楼 w6248117 的回复:
[quote=引用 4 楼 huige728 的回复:]
[quote=引用 3 楼 w6248117 的回复:]
[quote=引用 2 楼 huige728 的回复:]
[quote=引用 1 楼 w6248117 的回复:]
你这只有第一条数据符合条件返回成功!所以就只有只会执行加一的操作啊!


那我要怎么修改才能让它往下走,并循环筛选出出其他数据?[/quote]

你在调用函数bijiao()的时候第二个参数$key传的是什么?[/quote]


参数$key(数组)是我在输入框输入的搜索关键字,多个关键字我拆分成数组了。[/quote]

你输入多个关键字然后打印一下你的$key看看。[/quote]

这是结果,好像多个关键字也出错了,出现的第一条数据的返回序号应该是2(表中第2行的数据)而不是3
木秀猿林 2018-05-10
  • 打赏
  • 举报
回复
引用 4 楼 huige728 的回复:
[quote=引用 3 楼 w6248117 的回复:] [quote=引用 2 楼 huige728 的回复:] [quote=引用 1 楼 w6248117 的回复:] 你这只有第一条数据符合条件返回成功!所以就只有只会执行加一的操作啊!
那我要怎么修改才能让它往下走,并循环筛选出出其他数据?[/quote] 你在调用函数bijiao()的时候第二个参数$key传的是什么?[/quote] 参数$key(数组)是我在输入框输入的搜索关键字,多个关键字我拆分成数组了。[/quote] 你输入多个关键字然后打印一下你的$key看看。
huige728 2018-05-10
  • 打赏
  • 举报
回复
引用 3 楼 w6248117 的回复:
[quote=引用 2 楼 huige728 的回复:] [quote=引用 1 楼 w6248117 的回复:] 你这只有第一条数据符合条件返回成功!所以就只有只会执行加一的操作啊!
那我要怎么修改才能让它往下走,并循环筛选出出其他数据?[/quote] 你在调用函数bijiao()的时候第二个参数$key传的是什么?[/quote] 参数$key(数组)是我在输入框输入的搜索关键字,多个关键字我拆分成数组了。
木秀猿林 2018-05-10
  • 打赏
  • 举报
回复
引用 2 楼 huige728 的回复:
[quote=引用 1 楼 w6248117 的回复:] 你这只有第一条数据符合条件返回成功!所以就只有只会执行加一的操作啊!
那我要怎么修改才能让它往下走,并循环筛选出出其他数据?[/quote] 你在调用函数bijiao()的时候第二个参数$key传的是什么?
huige728 2018-05-10
  • 打赏
  • 举报
回复
引用 18 楼 w6248117 的回复:
循环遍历的不是$key,是标题数组。你遍历关键字肯定是得不到的,而且我这个是匹配到就直接返回了不会再往后遍历了。你如果要获取所有匹配到的序号就只能返回数组了。

现在可以了,但是还有一个问题 就是去重,我尝试把拿到的行号放到数组去去重,但是没有输出
		for($line=2; $line<=50; $line++) {
$rand_ones = trim(charaget(get_file_line($files, $line)));
$E_rand_ones=explode("\t",$rand_ones);
//var_dump($E_rand_ones[0]);

//echo "$E_rand_ones[0]==$key == <br>\r\n";

foreach($keyword as $val){

if (strstr( $E_rand_ones[0] , $val ) !== false ){
echo "$line <br>\r\n";
}
}

}




木秀猿林 2018-05-10
  • 打赏
  • 举报
回复
引用 16 楼 huige728 的回复:
我试试了,发现还是没有获得序号

function bijiao($biaoti,$key){
    foreach($key as $k => $val){         
		//print($k."=>".$val.";");
		$key_list=$val;
		//echo '$key_list是',gettype($key_list),'型','<br />';
		
		if($biaoti!="" && !empty($key)){
			echo "[$biaoti]==[$key_list] == ";
			$ok=stristr($biaoti,$key_list);
			if($ok){
               return $k+1;
            }
			
		}	
    }
	return 0;
}
循环遍历的不是$key,是标题数组。你遍历关键字肯定是得不到的,而且我这个是匹配到就直接返回了不会再往后遍历了。你如果要获取所有匹配到的序号就只能返回数组了。
huige728 2018-05-09
  • 打赏
  • 举报
回复
引用 1 楼 w6248117 的回复:
你这只有第一条数据符合条件返回成功!所以就只有只会执行加一的操作啊!
那我要怎么修改才能让它往下走,并循环筛选出出其他数据?
加载更多回复(1)

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧