关于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服务器实现多session并发运行
Oct 09 PHP
第十二节--类的自动加载
Nov 16 PHP
phpMyAdmin2.11.6安装配置方法
Aug 24 PHP
php+AJAX传送中文会导致乱码的问题的解决方法
Sep 08 PHP
PHP 采集心得技巧
May 15 PHP
php学习笔记 面向对象中[接口]与[多态性]的应用
Jun 16 PHP
解决FastCGI 进程超过了配置的活动超时时限的问题
Jul 03 PHP
php获取淘宝分类id示例
Jan 16 PHP
使用phpexcel类实现excel导入mysql数据库功能(实例代码)
May 12 PHP
浅析PHP数据导出知识点
Feb 17 PHP
Referer原理与图片防盗链实现方法详解
Jul 03 PHP
thinkphp5实现微信扫码支付
Dec 23 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
ThinkPHP中Session用法详解
2014/11/29 PHP
Yii控制器中操作视图js的方法
2016/07/04 PHP
在 Laravel 项目中使用 webpack-encore的方法
2019/07/21 PHP
laravel5环境隐藏index.php后缀(apache)的方法
2019/10/12 PHP
JS OffsetParent属性深入解析
2014/01/13 Javascript
javascript实现微信分享
2014/12/23 Javascript
Jquery 实现弹出层插件
2015/01/28 Javascript
Javascript对象Clone实例分析
2015/06/09 Javascript
JavaScript仿商城实现图片广告轮播实例代码
2016/02/06 Javascript
mpvue中使用flyjs全局拦截的实现代码
2018/09/13 Javascript
js实现延迟加载的几种方法详解
2019/01/19 Javascript
使用 Vue cli 3.0 构建自定义组件库的方法
2019/04/30 Javascript
微信小程序实现电影App导航和轮播
2020/11/30 Javascript
node.js 基于 STMP 协议和 EWS 协议发送邮件
2021/02/14 Javascript
Python中内置数据类型list,tuple,dict,set的区别和用法
2015/12/14 Python
深入理解python函数递归和生成器
2016/06/06 Python
Python对象类型及其运算方法(详解)
2017/07/05 Python
python的unittest测试类代码实例
2017/12/07 Python
Python pyinotify日志监控系统处理日志的方法
2018/03/08 Python
对python实时得到鼠标位置的示例讲解
2018/10/14 Python
Pycharm2017版本设置启动时默认自动打开项目的方法
2018/10/29 Python
林清轩官方网站:山茶花润肤油开创者
2016/10/26 全球购物
Maje德国官网:法国女性成衣品牌
2017/02/10 全球购物
拥有超过850家商店的美国在线派对商店:Party City
2018/10/21 全球购物
关于VPN
2012/06/10 面试题
小学生安全保证书
2014/02/01 职场文书
大堂副理的岗位职责范文
2014/02/17 职场文书
新学期教师寄语
2014/04/02 职场文书
《海底世界》教学反思
2014/04/16 职场文书
大学三年计划书范文
2014/04/30 职场文书
派出所班子党的群众路线对照检查材料思想汇报
2014/10/01 职场文书
起诉离婚协议书样本
2014/11/25 职场文书
工资证明格式模板
2015/06/12 职场文书
学困生帮扶工作总结
2015/08/13 职场文书
求职信:求职应该注意的问题
2019/04/24 职场文书
2019优秀干部竞聘演讲稿范文!
2019/07/02 职场文书