关于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配置心得包含MYSQL5乱码解决
Nov 20 PHP
《PHP边学边教》(04.编写简易的通讯录――视频教程1)
Dec 13 PHP
Search File Contents PHP 搜索目录文本内容的代码
Feb 21 PHP
PHP 开发环境配置(Zend Studio)
Apr 28 PHP
php中获取远程客户端的真实ip地址的方法
Aug 03 PHP
PHP扩展模块Pecl、Pear以及Perl的区别
Apr 09 PHP
php实现的简单检验登陆类
Jun 18 PHP
php连接oracle数据库的方法(测试成功)
May 26 PHP
yii框架无限极分类的实现方法
Apr 08 PHP
php出租房数据管理及搜索页面
May 23 PHP
PHP实现的随机红包算法示例
Aug 14 PHP
关于PHP中interface的用处详解
Jul 26 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中file_exists与is_file,is_dir的区别介绍
2012/09/12 PHP
PHP读取PDF内容配合Xpdf的使用
2012/11/24 PHP
PHP实现的蚂蚁爬杆路径算法代码
2015/12/03 PHP
Laravel使用支付宝进行支付的示例代码
2017/08/16 PHP
YII2框架中ActiveDataProvider与GridView的配合使用操作示例
2020/03/18 PHP
JS中==与===操作符的比较
2009/03/21 Javascript
基于jquery实现图片广告轮换效果代码
2011/07/07 Javascript
JS上传前预览图片实例
2013/03/25 Javascript
jQuery实现长文字部分显示代码
2013/05/13 Javascript
jQuery动画效果-fadeIn fadeOut淡入浅出示例代码
2013/08/28 Javascript
教你如何在 Javascript 文件里使用 .Net MVC Razor 语法
2014/07/23 Javascript
使用jquery制作弹出框效果
2015/04/03 Javascript
深入理解JavaScript中的对象
2015/06/04 Javascript
javascript实现信息增删改查的方法
2015/07/25 Javascript
nodejs初步体验篇
2015/11/23 NodeJs
限制文本框只能输入数字||只能是数字和小数点||只能是整数和浮点数
2016/05/27 Javascript
JavaScript实现经典排序算法之冒泡排序
2016/12/28 Javascript
JavaScript实现图像模糊化的方法实例
2017/01/15 Javascript
详解在vue-cli中使用路由
2017/09/25 Javascript
深入理解JS中Number(),parseInt(),parseFloat()三者比较
2018/08/24 Javascript
JS 验证码功能的三种实现方式
2018/11/26 Javascript
深入理解Javascript中的this关键字
2015/03/27 Python
Python smallseg分词用法实例分析
2015/05/28 Python
python 的列表遍历删除实现代码
2020/04/12 Python
python3 打开外部程序及关闭的示例
2018/11/06 Python
python将pandas datarame保存为txt文件的实例
2019/02/12 Python
德国低价购买灯具和家具网站:Style-home.de
2016/11/25 全球购物
存储过程和函数的区别
2013/05/28 面试题
毕业生简历自我评价范文
2014/04/09 职场文书
班级学习雷锋活动总结
2014/07/04 职场文书
党的群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
宾馆前台接待岗位职责
2015/04/02 职场文书
2019送给家人们的中秋节祝福语
2019/08/15 职场文书
Nginx+Windows搭建域名访问环境的操作方法
2022/03/17 Servers
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
2022/04/11 Python
Golang jwt身份认证
2022/04/20 Golang