PHP数组迭代器的用法是怎样,如何理解
Admin 2022-05-25 群英技术资讯 1105 次浏览
这篇文章主要介绍“PHP数组迭代器的用法是怎样,如何理解”,有一些人在PHP数组迭代器的用法是怎样,如何理解的问题上存在疑惑,接下来小编就给大家来介绍一下相关的内容,希望对大家解答有帮助,有这个方面学习需要的朋友就继续往下看吧。近来在开发一个视力筛查电子报告系统的产品,这个产品的作用是自动提取视力筛查过程中得到的屈光检查数据,并结合数据自动生成通俗易懂且专业的电子报告,以方便家长可以通过公众号或H5链接查阅。
要实现这个需求,第一步是对验光设备里打印出来的纸质报告做OCR,图片识别接口返回的是二维数组,报告的原图是这样的:

OCR接口返回的数据是这样的
array(3) {
["words_result"]=>
array(36) {
[0]=>
array(1) {
["words"]=>
string(8) "FA-6000A"
}
[1]=>
array(1) {
["words"]=>
string(10) "2022-09-16"
}
[2]=>
array(1) {
["words"]=>
string(7) "04:00"
}
[3]=>
array(1) {
["words"]=>
string(8) "SHOP:B"
}
[4]=>
array(1) {
["words"]=>
string(7) "NAME:"
}
[5]=>
array(1) {
["words"]=>
string(3) "<R>"
}
[6]=>
array(1) {
["words"]=>
string(1) "C"
}
[7]=>
array(1) {
["words"]=>
string(1) "A"
}
[8]=>
array(1) {
["words"]=>
string(5) "-1.50"
}
[9]=>
array(1) {
["words"]=>
string(5) "-0.25"
}
[10]=>
array(1) {
["words"]=>
string(3) "131"
}
[11]=>
array(1) {
["words"]=>
string(5) "-1.50"
}
[12]=>
array(1) {
["words"]=>
string(7) "-0,25"
}
[13]=>
array(1) {
["words"]=>
string(3) "122"
}
[14]=>
array(1) {
["words"]=>
string(7) "-1,50"
}
[15]=>
array(1) {
["words"]=>
string(7) "-0,25"
}
[16]=>
array(1) {
["words"]=>
string(3) "114"
}
[17]=>
array(1) {
["words"]=>
string(5) "-1.50"
}
[18]=>
array(1) {
["words"]=>
string(7) "-0,25"
}
[19]=>
array(1) {
["words"]=>
string(3) "122"
}
[20]=>
array(1) {
["words"]=>
string(3) "<L>"
}
[21]=>
array(1) {
["words"]=>
string(1) "C"
}
[22]=>
array(1) {
["words"]=>
string(1) "A"
}
[23]=>
array(1) {
["words"]=>
string(5) "-1.50"
}
[24]=>
array(1) {
["words"]=>
string(4) "+0.0"
}
[25]=>
array(1) {
["words"]=>
string(5) "-1.25"
}
[26]=>
array(1) {
["words"]=>
string(7) "-0,25"
}
[27]=>
array(1) {
["words"]=>
string(3) "158"
}
[28]=>
array(1) {
["words"]=>
string(5) "-1.00"
}
[29]=>
array(1) {
["words"]=>
string(5) "-0.25"
}
[30]=>
array(1) {
["words"]=>
string(3) "100"
}
[31]=>
array(1) {
["words"]=>
string(1) "*"
}
[32]=>
array(1) {
["words"]=>
string(5) "-1.25"
}
[33]=>
array(1) {
["words"]=>
string(4) "+0.0"
}
[34]=>
array(1) {
["words"]=>
string(5) "U0=12"
}
[35]=>
array(1) {
["words"]=>
string(5) "PD=58"
}
}
["words_result_num"]=>
int(36)
["log_id"]=>
int(1455742838110100386)
}
而系统的需求是提取两个号后面的两个数字,那肯定是对上述数组做遍历处理,然后遇到号便提取接下来的两个元素,但在foreach里面,如果做标记,等下次进来时再提取数据比较麻烦,能不能在遇到*号字符串后,直接提取接下来的两个字符串呢,这时我的脑海里出现了迭代器的概念,可能是之前用python或java开发时接触到的吧,于是搜索了一下,果然PHP也是有迭代器的!!!
接下来简单看了一下PHP文档中的示例,就开始干了,很顺利,5分钟完工,下面把代码贴出来并辅以简单的注释帮助大家理解:
$usefulNumList = [];
$wordsResult = new \ArrayIterator($wordsResult);//初始化数组迭代器,传入数组变量
foreach($wordsResult as $item){
$tempWords = $item['words'];
if(strpos($tempWords, '*') !== false){
if($tempWords === '*'){//有时候,*号会单独识别成一个字符串,有时候会和后面的数字识别到一起,如果是单独识别出来的,要把指针向后挪一位
$wordsResult->next();//实现方法是: 数组变更名->next()方法
}
//注意,调用了next()方法后,不能再用$item去取数组元素值,要用current()方法才能取到"下一个值"
array_push($usefulNumList, $this->getCleanNum($wordsResult->current()['words']));
$wordsResult->next();
array_push($usefulNumList, $this->getCleanNum($wordsResult->current()['words']));
}
}
需注意的地方请看一下代码注释,本身封装得很好,很容易理解和调用的
总结
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章给大家分享的是yii2框架场景的使用,主要介绍了规则场景的使用示例以及场景方法定义字段的在固定场景下才能被修改的的示例,具有一定的参考价值,感兴趣的朋友们可以看看。
这篇文章主要介绍了php项目接入xxl-job调度系统的示例代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
laravel 开启跨域请求的方法是什么?我们知道因为浏览器同源策略,凡是发送请求url的协议、域名、端口三者之间任意一个与当前页面地址不同即为跨域。因此,我们需要开启跨域请求来解决跨域问题。下面通过一个实例给大家分享关于laravel 开启跨域请求的方法。
Swoole4为PHP语言提供了强大的CSP协程编程模式,用户可以通过go函数创建一个协程,以达到并发执行的效果。go()函数用于创建协程;Co::yield()使得当前协程让出CPU;Co::resume()可恢复某个协程执行。
php mysql查询记录数的方法:1、在查询时直接统计,语句如“$count=$result['count'];”;2、先取出,后统计,语句如“$count=mysql_num_rows($result);”。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008