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

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.

...全文
763 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)
PowerBI系列之Power Query专题1.  获取数据 数据源种类介绍和获取Excel数据源输入数据和拷贝数据:创建辅助表解析Json/XML数据格式获取Web网页数据和URL添加动态参数连接数据的四种模式:Import、DirectQuery、Live Connection、Dual双 属于混合模式连接数据库:Sql server、 Mysql(直连但是必须先安装一个mysql插件)DirectQuery直连查询:Sql serverODBC方式获取数据表关联或多个Sql或调用存储过程获取数据SQL中动态传参和自定义函数: sql中使用参数或数据库名称使用参数连接Sharepoint和OneDrive数据源连接Dataset和Dataflow 替换本地数据源为Sharepoint数据源并保留数据处理操作 终止当前数据刷新Loading:Cancel Query数据源设置-重置数据连接凭证PBIDS连接数据源创建和使用报表模块(输入或值列表)利用报表模板和参数控制线下报表数据权限DirectQuery启用自动页面刷新和更改检测管理聚合表提高DirectQuery查询性能动态M查询参数提高DirectQuery查询性能添加数据刷新时间 DateTime.LocalNow()和Getdate()2.  数据清洗和M语言M语言和官方文档介绍PowerQuery中查阅M函数:=#shared, Ctrl+Space提示数据清洗之常用技能:提升标题、更改数据类型、保留删除错误或空行,删除重复项、选择列和删除列、填充单元格、合并列、拆分、提取、替换、条件替换、添加自定义列,添加条件列、添加索引列、分组、添加年月日列、追加和合并查询透视和逆透视以及转置合并单元格的Excel文件处理导入文件夹中多Excel文件并合并解决多文件合并中列顺序不一致使用参数和函数批量导入文件 文本中提取中文、英文、数字等处理双引号转义 列拆分详解解决列名改变错误解决列丢失错误动态显示、排序和重命名列为所有列名添加前缀列名字母大写和分隔符调整Trim标题列中的多余空格如何处理load数据错误为什么load的Excel数据有null空行为什么load的Excel数据标题在第二行灵活添加占位符规范同类相似数据数据按多列排序为分组添加Index序号分组内值合并诊断工具分析数据处理过程PowerQuery小技巧分享 新冠病例活动轨迹地图标识 

21,886

社区成员

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

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