关于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函数utf8转gb2312编码
Dec 21 PHP
php MySQL与分页效率
Jun 04 PHP
php SQL之where语句生成器
Mar 24 PHP
php错误、异常处理机制(补充)
May 07 PHP
php不用正则验证真假身份证
Nov 06 PHP
XAMPP安装与使用方法详细解析
Nov 27 PHP
destoon调用企业会员公司形象图片的实现方法
Aug 21 PHP
PHP实现将textarea的值根据回车换行拆分至数组
Jun 10 PHP
CodeIgniter开发实现支付宝接口调用的方法示例
Nov 14 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
Sep 16 PHP
laravel利用中间件做防非法登录和权限控制示例
Oct 21 PHP
laravel框架中表单请求类型和CSRF防护实例分析
Nov 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
解析php安全性问题中的:Null 字符问题
2013/06/21 PHP
php强制运行广告的方法
2014/12/01 PHP
一键生成各种尺寸Icon的php脚本(实例)
2017/02/08 PHP
javascript 避免闭包引发的问题
2009/03/17 Javascript
jQuery 白痴级入门教程
2009/11/11 Javascript
jquery如何判断某元素是否具备指定的样式
2013/11/05 Javascript
jquery 中的each()跳出循环的语句
2014/05/23 Javascript
javascript实现了照片拖拽点击置顶的照片墙代码
2015/04/03 Javascript
Angular 中 select指令用法详解
2016/09/29 Javascript
JS二叉树的简单实现方法示例
2017/04/05 Javascript
jQuery导航条固定定位效果实例代码
2017/05/26 jQuery
vue开发简单上传图片功能
2020/06/30 Javascript
vue用elementui写form表单时,在label里添加空格操作
2020/08/13 Javascript
JavaScript中CreateTextFile函数
2020/08/30 Javascript
React Native登录之指纹登录篇的示例代码
2020/11/03 Javascript
python3访问sina首页中文的处理方法
2014/02/24 Python
Python+Opencv识别两张相似图片
2020/03/23 Python
深入解析Python小白学习【操作列表】
2019/03/23 Python
Python代码太长换行的实现
2019/07/05 Python
对python中的os.getpid()和os.fork()函数详解
2019/08/08 Python
Django框架 信号调度原理解析
2019/09/04 Python
pytorch 使用加载训练好的模型做inference
2020/02/20 Python
Django 实现将图片转为Base64,然后使用json传输
2020/03/27 Python
使用Python FastAPI构建Web服务的实现
2020/06/08 Python
Python eval函数介绍及用法
2020/11/09 Python
CSS实现进度条和订单进度条的示例
2020/11/05 HTML / CSS
英国著名音像制品和图书游戏购物网站:Zavvi
2016/08/04 全球购物
美国在线自行车商店:Jenson USA
2018/05/22 全球购物
MONNIER Frères英国官网:源自巴黎女士奢侈品配饰电商平台
2018/12/06 全球购物
HelloFresh奥地利:立即订购烹饪盒
2019/02/22 全球购物
美国领先的家庭健康检测试剂盒提供商:LetsGetChecked
2019/03/18 全球购物
社区活动邀请函范文
2014/01/29 职场文书
街道党风廉政建设调研报告
2015/01/01 职场文书
检讨书格式
2015/01/23 职场文书
劳动仲裁代理词范文
2015/05/25 职场文书
Java Socket实现多人聊天系统
2021/07/15 Java/Android