关于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 相关文章推荐
VFP与其他应用程序的集成
Oct 09 PHP
PHP中一个控制字符串输出的函数
Oct 09 PHP
php之对抗Web扫描器的脚本技巧
Oct 01 PHP
PHP命名空间(Namespace)的使用详解
May 04 PHP
基于PHP常用函数的用法详解
May 10 PHP
浅谈web上存漏洞及原理分析、防范方法(安全文件上存方法)
Jun 29 PHP
php判断ip黑名单程序代码实例
Feb 24 PHP
php获取目标函数执行时间示例
Mar 04 PHP
PHP超牛逼无限极分类生成树方法
May 11 PHP
PHP使用Curl实现模拟登录及抓取数据功能示例
Apr 27 PHP
PHP PDOStatement::getColumnMeta讲解
Feb 01 PHP
RSA实现JS前端加密与PHP后端解密功能示例
Aug 05 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实现utf-8和GB2312编码相互转换函数代码
2013/02/07 PHP
php字符串截取的简单方法
2013/07/04 PHP
百度地图API应用之获取用户的具体位置
2014/06/10 PHP
php中opendir函数用法实例
2014/11/15 PHP
PHP页面跳转操作实例分析(header方法)
2016/09/28 PHP
PHP抽象类基本用法示例
2018/12/28 PHP
可以支持多中格式的JS键盘
2007/05/02 Javascript
ExtJS Ext.MessageBox.alert()弹出对话框详解
2010/04/02 Javascript
jQuery EasyUI API 中文文档 - Panel面板
2011/09/30 Javascript
javascript中Number对象的toString()方法分析
2014/12/20 Javascript
jQuery寻找n以内完全数的方法
2015/06/24 Javascript
JS折半插入排序算法实例
2015/12/02 Javascript
Javascript中构造函数要注意的一些坑
2017/01/23 Javascript
详解Angular 4.x NgTemplateOutlet
2017/05/24 Javascript
vue环境搭建简单教程
2017/11/07 Javascript
Angularjs实现页面模板清除的方法
2018/07/20 Javascript
浅析微信扫码登录原理(小结)
2018/10/29 Javascript
Vue的H5页面唤起支付宝支付功能
2019/04/18 Javascript
[03:49]显微镜下的DOTA2第十五期—VG登基之路完美团
2014/06/24 DOTA
[01:17]Ti4 循环赛第一日回顾
2014/07/11 DOTA
对Python3中dict.keys()转换成list类型的方法详解
2019/02/03 Python
Python安装与卸载流程详细步骤(图解)
2020/02/20 Python
Html5无刷新修改browser Url的方法
2014/01/15 HTML / CSS
HTML5中原生的右键菜单创建方法
2016/06/28 HTML / CSS
html如何对span设置宽度
2019/10/30 HTML / CSS
html5实现九宫格抽奖可固定抽中某项奖品
2020/06/15 HTML / CSS
日本食品网上商店:JaponShop.com
2017/11/28 全球购物
设计师珠宝:Ylang 23
2018/05/11 全球购物
我的中国梦演讲稿高中篇
2014/08/19 职场文书
2015新学期开学寄语
2015/02/26 职场文书
入党积极分子半年考察意见
2015/06/02 职场文书
《赵州桥》教学反思
2016/02/17 职场文书
公司周年庆寄语
2019/06/21 职场文书
FP-growth算法发现频繁项集——发现频繁项集
2021/06/24 Python
python中Matplotlib绘制直线的实例代码
2021/07/04 Python
oracle删除超过N天数据脚本的方法
2022/02/28 Oracle