关于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 上传文件大小限制
Jul 05 PHP
PHP 开源框架22个简单简介
Aug 24 PHP
浅谈PHP强制类型转换,慎用!
Jun 06 PHP
ThinkPHP表单自动提交验证实例教程
Jul 18 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
Mar 23 PHP
Yii2 输出xml格式数据的方法
May 03 PHP
CI框架使用composer安装的依赖包步骤与方法分析
Nov 21 PHP
PHP生成随机数的方法总结
Mar 01 PHP
详解提高使用Java反射的效率方法
Apr 29 PHP
php生成静态页面并实现预览功能
Jun 27 PHP
php中try catch捕获异常实例详解
Aug 06 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
dedecms系统常用术语汇总
2007/04/03 PHP
PHP 批量删除 sql语句
2009/06/05 PHP
PHP使用Alexa API获取网站的Alexa排名例子
2014/06/12 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
2014/10/24 PHP
thinkPHP下ueditor的使用方法详解
2015/12/26 PHP
详谈php ip2long 出现负数的原因及解决方法
2017/04/05 PHP
php实现的后台表格分页功能示例
2017/10/23 PHP
PHP哈希表实现算法原理解析
2020/12/11 PHP
js输出列表实现代码
2010/09/12 Javascript
通过jQuery源码学习javascript(三)
2012/12/27 Javascript
JQuery中操作Css样式的方法
2014/02/12 Javascript
JS删除字符串中重复字符方法
2014/03/09 Javascript
Js+Jq获取URL参数的集中方法示例代码
2014/05/20 Javascript
jQuery取消ajax请求的方法
2015/06/09 Javascript
Javascript中字符串相关常用的使用方法总结
2017/03/13 Javascript
js中url对象化管理分析
2017/12/29 Javascript
node打造微信个人号机器人的方法示例
2018/04/26 Javascript
JavaScript大数相加相乘的实现方法实例
2020/10/18 Javascript
Python快速从注释生成文档的方法
2016/12/26 Python
Django REST framework视图的用法
2019/01/16 Python
这可能是最好玩的python GUI入门实例(推荐)
2019/07/19 Python
OpenCV+face++实现实时人脸识别解锁功能
2019/08/28 Python
如何在python中判断变量的类型
2020/07/29 Python
Python中logging日志的四个等级和使用
2020/11/17 Python
海外淘书首选:AbeBooks
2017/07/31 全球购物
巴基斯坦购物网站:Goto
2019/03/11 全球购物
Andrew Marc官网:设计师外套的领先制造商
2019/10/30 全球购物
学校食堂采购员岗位职责
2013/12/05 职场文书
连锁酒店店长职责范本
2014/02/13 职场文书
庆祝教师节标语
2014/10/09 职场文书
市委召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
欠款证明
2015/06/24 职场文书
关于flex 上下文中自动 margin的问题(完整例子)
2021/05/20 HTML / CSS
详细总结Python常见的安全问题
2021/05/21 Python
uni-app 微信小程序授权登录的实现步骤
2022/02/18 Javascript
hive数据仓库新增字段方法
2022/06/25 数据库