关于PHP数组迭代器的使用方法实例


Posted in PHP onNovember 17, 2021

近来在开发一个视力筛查电子报告系统的产品,这个产品的作用是自动提取视力筛查过程中得到的屈光检查数据,并结合数据自动生成通俗易懂且专业的电子报告,以方便家长可以通过公众号或H5链接查阅。

要实现这个需求,第一步是对验光设备里打印出来的纸质报告做OCR,图片识别接口返回的是二维数组,报告的原图是这样的:

关于PHP数组迭代器的使用方法实例

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']));
    }
}

需注意的地方请看一下代码注释,本身封装得很好,很容易理解和调用的

总结

到此这篇关于PHP数组迭代器的使用方法的文章就介绍到这了,更多相关PHP数组迭代器使用内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

PHP 相关文章推荐
随机头像PHP版
Oct 09 PHP
PHP 和 MySQL 基础教程(三)
Oct 09 PHP
PHP新手上路(五)
Oct 09 PHP
实现dedecms全站URL静态化改造的代码
Mar 29 PHP
php中时间轴开发(刚刚、5分钟前、昨天10:23等)
Oct 03 PHP
php函数间的参数传递(值传递/引用传递)
Sep 23 PHP
php实现cc攻击防御和防止快速刷新页面示例
Feb 13 PHP
浅析php中json_encode()和json_decode()
May 25 PHP
PHP向socket服务器收发数据的方法
Jan 24 PHP
php实现向javascript传递数组的方法
Jul 27 PHP
linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程
Sep 30 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
Feb 18 PHP
php双向队列实例讲解
Nov 17 #PHP
如何解决php-fpm启动不了问题
Nov 17 #PHP
一次项目中Thinkphp绕过禁用函数的实战记录
php修改word的实例方法
Nov 17 #PHP
PHP获取学生成绩的方法
Nov 17 #PHP
php去除deprecated的实例方法
Nov 17 #PHP
php去除数组中为0的元素的实例分析
Nov 17 #PHP
You might like
php函数间的参数传递(值传递/引用传递)
2013/09/23 PHP
php获取给定日期相差天数的方法分析
2017/02/20 PHP
PHP安装BCMath扩展的方法
2019/02/13 PHP
获取焦点时,利用js定时器设定时间执行动作
2010/04/02 Javascript
node.js中的fs.symlinkSync方法使用说明
2014/12/15 Javascript
jQuery地图map悬停显示省市代码分享
2015/08/20 Javascript
JavaScript中有关一个数组中最大值和最小值及它们的下表的输出的解决办法
2016/07/01 Javascript
JS+HTML5实现的前端购物车功能插件实例【附demo源码下载】
2016/10/17 Javascript
详解JS中的快速排序与冒泡
2017/01/10 Javascript
nodejs个人博客开发第六步 数据分页
2017/04/12 NodeJs
NodeJs使用Mysql模块实现事务处理实例
2017/05/31 NodeJs
200行代码实现blockchain 区块链实例详解
2018/03/14 Javascript
JavaScript实现百度搜索框效果
2020/03/26 Javascript
js中对象和面向对象与Json介绍
2019/01/21 Javascript
vue-cli 3.x配置跨域代理的实现方法
2019/04/12 Javascript
js中值引用和地址引用实例分析
2019/06/21 Javascript
layui--js控制switch的切换方法
2019/09/03 Javascript
python判断端口是否打开的实现代码
2013/02/10 Python
python使用urllib模块开发的多线程豆瓣小站mp3下载器
2014/01/16 Python
Python如何发布程序的详细教程
2018/10/09 Python
pygame游戏之旅 添加碰撞效果的方法
2018/11/20 Python
python获取本机所有IP地址的方法
2018/12/26 Python
Python实例方法、类方法、静态方法的区别与作用详解
2019/03/25 Python
Pandas之groupby( )用法笔记小结
2019/07/23 Python
python迭代器常见用法实例分析
2019/11/22 Python
CSS3 RGBA色彩模式使用实例讲解
2016/04/26 HTML / CSS
app内嵌H5 webview 本地缓存问题的解决
2020/10/19 HTML / CSS
实习自荐信
2013/10/13 职场文书
大学生毕业的自我鉴定
2013/11/13 职场文书
应届毕业生求职自荐书
2014/01/03 职场文书
上学迟到的检讨书
2014/01/11 职场文书
2014年冬季防火方案
2014/05/21 职场文书
工作作风整顿个人剖析材料
2014/10/11 职场文书
2014年学生会个人工作总结
2014/11/07 职场文书
婚内分居协议书范文
2014/11/26 职场文书
爱护环境建议书
2015/09/14 职场文书