关于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中获取远程客户端的真实ip地址的方法
Aug 03 PHP
PHP间隔一段时间执行代码的方法
Dec 02 PHP
smarty模板引擎从php中获取数据的方法
Jan 22 PHP
PHP各种异常和错误的拦截方法及发生致命错误时进行报警
Jan 19 PHP
Symfony2框架学习笔记之HTTP Cache用法详解
Mar 18 PHP
Windows2003下php5.4安装配置教程(IIS)
Jun 30 PHP
使用phpQuery获取数组的实例
Mar 13 PHP
PHP判断密码强度的方法详解
May 26 PHP
PHP实现的超长文本分页显示功能示例
Jun 04 PHP
PHP7.0连接DB操作实例分析【基于mysqli】
Sep 26 PHP
Laravel 将数据表的数据导出,并生成seeds种子文件的方法
Oct 09 PHP
Laravel 错误提示本地化的实现
Oct 22 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原理之异常机制
2010/08/21 PHP
php 模拟get_headers函数的代码示例
2013/04/27 PHP
解析php中两种缩放图片的函数,为图片添加水印
2013/06/14 PHP
php数据访问之增删改查操作
2016/05/09 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
2019/04/03 PHP
php实现JWT验证的实例教程
2020/11/26 PHP
JS 文件传参及处理技巧分析
2010/05/13 Javascript
基于jQuery的弹出警告对话框美化插件(警告,确认和提示)
2010/06/10 Javascript
Javascript中定义方法的另类写法(批量定义js对象的方法)
2011/02/25 Javascript
jQuery 名称冲突的解决方法
2011/04/08 Javascript
Javascript继承(上)——对象构建介绍
2012/11/08 Javascript
web基于浏览器的本地存储方法应用
2012/11/27 Javascript
JQuery的Ajax跨域请求原理概述及实例
2013/04/26 Javascript
js实现简单的星级选择器提交效果适用于评论等
2013/10/18 Javascript
javascript制作坦克大战全纪录(1)
2014/11/27 Javascript
javascript中几个容易混淆的概念总结
2015/04/14 Javascript
flash+jQuery实现可关闭及重复播放的压顶广告
2015/04/15 Javascript
jquery插件格式实例分析
2016/06/16 Javascript
JS调用打印机功能简单示例
2016/11/28 Javascript
Vue计算属性的学习笔记
2017/03/22 Javascript
[49:54]Ti4 循环赛第三日 LGD vs Titan
2014/07/12 DOTA
python根据路径导入模块的方法
2014/09/30 Python
python通过floor函数舍弃小数位的方法
2015/03/17 Python
Django自定义分页与bootstrap分页结合
2021/02/22 Python
对python numpy数组中冒号的使用方法详解
2018/04/17 Python
Python将8位的图片转为24位的图片实现方法
2018/10/24 Python
python matplotlib库直方图绘制详解
2019/08/10 Python
python Matplotlib基础--如何添加文本和标注
2021/01/26 Python
this关键字的作用
2016/01/30 面试题
介绍一下Java中的static关键字
2012/05/12 面试题
违反学校规则制度检讨书
2015/01/01 职场文书
家长学校教学计划
2015/01/19 职场文书
给女朋友道歉的话大全
2015/01/20 职场文书
法人代表资格证明书
2015/06/18 职场文书
2016思想纪律作风整顿心得体会
2016/01/23 职场文书
在js中修改html body的样式
2021/11/11 Javascript