关于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 相关文章推荐
BBS(php &amp; mysql)完整版(二)
Oct 09 PHP
使用php4加速网络传输
Oct 09 PHP
php zend 相对路径问题
Jan 12 PHP
PHP number_format() 函数定义和用法
Jun 01 PHP
Php header()函数语法及使用代码
Nov 04 PHP
php获取文件大小的方法
Feb 26 PHP
php如何实现只替换一次或N次
Oct 29 PHP
PHP的AES加密算法完整实例
Jul 20 PHP
PHP面向对象五大原则之开放-封闭原则(OCP)详解
Apr 04 PHP
php curl获取到json对象并转成数组array的方法
May 31 PHP
Laravel框架模型的创建及模型对数据操作示例
May 07 PHP
PHP面向对象程序设计之对象克隆clone和魔术方法__clone()用法分析
Jun 12 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获得文件扩展名三法
2006/11/25 PHP
PHP开发框架kohana中处理ajax请求的例子
2014/07/14 PHP
PHP使用CURL_MULTI实现多线程采集的例子
2014/07/29 PHP
在Thinkphp中使用ajax实现无刷新分页的方法
2016/10/25 PHP
Extjs中常用表单介绍与应用
2010/06/07 Javascript
jquery keypress,keyup,onpropertychange键盘事件
2010/06/25 Javascript
js模拟类继承小例子
2010/07/17 Javascript
Array, Array Constructor, for in loop, typeof, instanceOf
2011/09/13 Javascript
增强用户体验友好性之jquery easyui window 窗口关闭时的提示
2012/06/22 Javascript
30分钟就入门的正则表达式基础教程
2013/02/25 Javascript
JavaScript中的数组特性介绍
2014/12/30 Javascript
jQuery中wrapInner()方法用法实例
2015/01/16 Javascript
js实现固定显示区域内自动缩放图片的方法
2015/07/18 Javascript
高效的jquery数字滚动特效
2015/12/17 Javascript
jquery实现图片预加载
2015/12/25 Javascript
Javascript之Date对象详解
2016/06/07 Javascript
Bootstrap作品展示站点实战项目2
2016/10/14 Javascript
js 作用域和变量详解
2017/02/16 Javascript
浅谈在Vue-cli里基于axios封装复用请求
2017/11/06 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
2018/02/02 jQuery
Vue表单输入绑定的示例代码
2018/11/01 Javascript
原生js实现日期选择插件
2020/05/21 Javascript
js实现贪吃蛇游戏(简易版)
2020/09/29 Javascript
Using Django with GAE Python 后台抓取多个网站的页面全文
2016/02/17 Python
Python常见加密模块用法分析【MD5,sha,crypt模块】
2017/05/24 Python
python模拟表单提交登录图书馆
2018/04/27 Python
Win10环境python3.7安装dlib模块趟过的坑
2019/08/01 Python
python实现两个文件夹的同步
2019/08/29 Python
GNC健安喜官方海外旗舰店:美国著名保健品牌
2017/01/04 全球购物
凯撒娱乐:Caesars Entertainment
2018/02/23 全球购物
德国旅游网站:weg.de
2018/06/03 全球购物
廉洁校园实施方案
2014/05/25 职场文书
食堂采购员岗位职责
2015/04/03 职场文书
学法用法心得体会(2016推荐篇)
2016/01/21 职场文书
Python使用protobuf序列化和反序列化的实现
2021/05/19 Python
Python实现照片卡通化
2021/12/06 Python