关于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 相关文章推荐
在windows iis5下安装php4.0+mysql之我见
Oct 09 PHP
通过PHP CLI实现简单的数据库实时监控调度
Jul 01 PHP
PHP 文本文章分页代码 按标记或长度(不涉及数据库)
Jun 07 PHP
慎用preg_replace危险的/e修饰符(一句话后门常用)
Jun 19 PHP
ThinkPHP3.1的Widget新用法
Jun 19 PHP
php设计模式之单例模式实例分析
Feb 25 PHP
PHP IDE phpstorm 常用快捷键
May 18 PHP
利用PHP将部分内容用星号替换
Apr 21 PHP
PHP实现补齐关闭的HTML标签
Mar 22 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
Apr 18 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
Jun 13 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
Jul 24 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
PHP6新特性分析
2016/03/03 PHP
PHP简单实现解析xml为数组的方法
2018/05/02 PHP
Nigma vs Liquid BO3 第二场2.14
2021/03/10 DOTA
jquery实现图片左右间隔滚动特效(可自动播放)
2013/05/08 Javascript
jQuery表格插件ParamQuery简单使用方法示例
2013/12/05 Javascript
javascript获取隐藏元素(display:none)的高度和宽度的方法
2014/06/06 Javascript
jquery让返回的内容显示在特定div里(代码少而精悍)
2014/06/23 Javascript
jQuery简单实现日历的方法
2015/05/04 Javascript
angularJS 如何读写缓冲的方法(推荐)
2016/08/06 Javascript
解决vue打包之后静态资源图片失效的问题
2018/02/21 Javascript
浅谈webpack打包生成的bundle.js文件过大的问题
2018/02/22 Javascript
jQuery动态添加li标签并添加属性和绑定事件方法
2018/02/24 jQuery
《javascript少儿编程》location术语总结
2018/05/27 Javascript
详解node.js的http模块实例演示
2018/07/12 Javascript
使用Vue父子组件通信实现todolist的功能示例代码
2019/04/11 Javascript
JavaScript实现英语单词题库
2019/12/24 Javascript
Vue.js实现立体计算器
2020/02/22 Javascript
如何在vue 中使用柱状图 并自修改配置
2021/01/21 Vue.js
Python多进程并发与多线程并发编程实例总结
2018/02/08 Python
对Python3 * 和 ** 运算符详解
2019/02/16 Python
python实现AES加密与解密
2019/03/28 Python
如何使用Python实现自动化水军评论
2019/06/26 Python
一文了解python 3 字符串格式化 F-string 用法
2020/03/04 Python
Python 实现敏感目录扫描的示例代码
2020/05/21 Python
如何在pycharm中安装第三方包
2020/10/27 Python
基于Python-Pycharm实现的猴子摘桃小游戏(源代码)
2021/02/20 Python
CSS3之背景尺寸Background-size使用介绍
2013/10/14 HTML / CSS
纯css3实现图片翻牌特效
2015/03/10 HTML / CSS
What's the difference between an interface and abstract class? (接口与抽象类有什么区别)
2012/10/29 面试题
sort命令的作用和用法
2013/08/25 面试题
餐厅楼面部长岗位职责范文
2014/02/16 职场文书
社区消防工作实施方案
2014/03/21 职场文书
2015年度房地产工作总结
2015/04/09 职场文书
党员电教片《信仰》心得体会
2016/01/15 职场文书
普希金的诗歌赏析(3首)
2019/08/20 职场文书
解析MySQL binlog
2021/06/11 MySQL