设为首页收藏本站

安徽论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9244|回复: 0

关于PHP数组迭代器的使用方法实例

[复制链接]

83

主题

0

回帖

261

积分

中级会员

Rank: 3Rank: 3

积分
261
发表于 2022-3-26 10:58:08 | 显示全部楼层 |阅读模式
网站内容均来自网络,本站只提供信息平台,如有侵权请联系删除,谢谢!
近来在开发一个视力筛查电子报告系统的产品,这个产品的作用是自动提取视力筛查过程中得到的屈光检查数据,并结合数据自动生成通俗易懂且专业的电子报告,以方便家长可以通过公众号或H5链接查阅。
要实现这个需求,第一步是对验光设备里打印出来的纸质报告做OCR,图片识别接口返回的是二维数组,报告的原图是这样的:

OCR接口返回的数据是这样的
  1. array(3) {
  2.   ["words_result"]=>
  3.   array(36) {
  4.     [0]=>
  5.     array(1) {
  6.       ["words"]=>
  7.       string(8) "FA-6000A"
  8.     }
  9.     [1]=>
  10.     array(1) {
  11.       ["words"]=>
  12.       string(10) "2022-09-16"
  13.     }
  14.     [2]=>
  15.     array(1) {
  16.       ["words"]=>
  17.       string(7) "04:00"
  18.     }
  19.     [3]=>
  20.     array(1) {
  21.       ["words"]=>
  22.       string(8) "SHOP:B"
  23.     }
  24.     [4]=>
  25.     array(1) {
  26.       ["words"]=>
  27.       string(7) "NAME:"
  28.     }
  29.     [5]=>
  30.     array(1) {
  31.       ["words"]=>
  32.       string(3) "<R>"
  33.     }
  34.     [6]=>
  35.     array(1) {
  36.       ["words"]=>
  37.       string(1) "C"
  38.     }
  39.     [7]=>
  40.     array(1) {
  41.       ["words"]=>
  42.       string(1) "A"
  43.     }
  44.     [8]=>
  45.     array(1) {
  46.       ["words"]=>
  47.       string(5) "-1.50"
  48.     }
  49.     [9]=>
  50.     array(1) {
  51.       ["words"]=>
  52.       string(5) "-0.25"
  53.     }
  54.     [10]=>
  55.     array(1) {
  56.       ["words"]=>
  57.       string(3) "131"
  58.     }
  59.     [11]=>
  60.     array(1) {
  61.       ["words"]=>
  62.       string(5) "-1.50"
  63.     }
  64.     [12]=>
  65.     array(1) {
  66.       ["words"]=>
  67.       string(7) "-0,25"
  68.     }
  69.     [13]=>
  70.     array(1) {
  71.       ["words"]=>
  72.       string(3) "122"
  73.     }
  74.     [14]=>
  75.     array(1) {
  76.       ["words"]=>
  77.       string(7) "-1,50"
  78.     }
  79.     [15]=>
  80.     array(1) {
  81.       ["words"]=>
  82.       string(7) "-0,25"
  83.     }
  84.     [16]=>
  85.     array(1) {
  86.       ["words"]=>
  87.       string(3) "114"
  88.     }
  89.     [17]=>
  90.     array(1) {
  91.       ["words"]=>
  92.       string(5) "-1.50"
  93.     }
  94.     [18]=>
  95.     array(1) {
  96.       ["words"]=>
  97.       string(7) "-0,25"
  98.     }
  99.     [19]=>
  100.     array(1) {
  101.       ["words"]=>
  102.       string(3) "122"
  103.     }
  104.     [20]=>
  105.     array(1) {
  106.       ["words"]=>
  107.       string(3) "<L>"
  108.     }
  109.     [21]=>
  110.     array(1) {
  111.       ["words"]=>
  112.       string(1) "C"
  113.     }
  114.     [22]=>
  115.     array(1) {
  116.       ["words"]=>
  117.       string(1) "A"
  118.     }
  119.     [23]=>
  120.     array(1) {
  121.       ["words"]=>
  122.       string(5) "-1.50"
  123.     }
  124.     [24]=>
  125.     array(1) {
  126.       ["words"]=>
  127.       string(4) "+0.0"
  128.     }
  129.     [25]=>
  130.     array(1) {
  131.       ["words"]=>
  132.       string(5) "-1.25"
  133.     }
  134.     [26]=>
  135.     array(1) {
  136.       ["words"]=>
  137.       string(7) "-0,25"
  138.     }
  139.     [27]=>
  140.     array(1) {
  141.       ["words"]=>
  142.       string(3) "158"
  143.     }
  144.     [28]=>
  145.     array(1) {
  146.       ["words"]=>
  147.       string(5) "-1.00"
  148.     }
  149.     [29]=>
  150.     array(1) {
  151.       ["words"]=>
  152.       string(5) "-0.25"
  153.     }
  154.     [30]=>
  155.     array(1) {
  156.       ["words"]=>
  157.       string(3) "100"
  158.     }
  159.     [31]=>
  160.     array(1) {
  161.       ["words"]=>
  162.       string(1) "*"
  163.     }
  164.     [32]=>
  165.     array(1) {
  166.       ["words"]=>
  167.       string(5) "-1.25"
  168.     }
  169.     [33]=>
  170.     array(1) {
  171.       ["words"]=>
  172.       string(4) "+0.0"
  173.     }
  174.     [34]=>
  175.     array(1) {
  176.       ["words"]=>
  177.       string(5) "U0=12"
  178.     }
  179.     [35]=>
  180.     array(1) {
  181.       ["words"]=>
  182.       string(5) "PD=58"
  183.     }
  184.   }
  185.   ["words_result_num"]=>
  186.   int(36)
  187.   ["log_id"]=>
  188.   int(1455742838110100386)
  189. }
复制代码
而系统的需求是提取两个号后面的两个数字,那肯定是对上述数组做遍历处理,然后遇到号便提取接下来的两个元素,但在foreach里面,如果做标记,等下次进来时再提取数据比较麻烦,能不能在遇到*号字符串后,直接提取接下来的两个字符串呢,这时我的脑海里出现了迭代器的概念,可能是之前用python或java开发时接触到的吧,于是搜索了一下,果然PHP也是有迭代器的!!!
接下来简单看了一下PHP文档中的示例,就开始干了,很顺利,5分钟完工,下面把代码贴出来并辅以简单的注释帮助大家理解:
  1. $usefulNumList = [];
  2. $wordsResult = new \ArrayIterator($wordsResult);//初始化数组迭代器,传入数组变量
  3. foreach($wordsResult as $item){
  4.         $tempWords = $item['words'];
  5.     if(strpos($tempWords, '*') !== false){
  6.             if($tempWords === '*'){//有时候,*号会单独识别成一个字符串,有时候会和后面的数字识别到一起,如果是单独识别出来的,要把指针向后挪一位
  7.                 $wordsResult->next();//实现方法是: 数组变更名->next()方法
  8.         }
  9.        //注意,调用了next()方法后,不能再用$item去取数组元素值,要用current()方法才能取到"下一个值"
  10.        array_push($usefulNumList, $this->getCleanNum($wordsResult->current()['words']));
  11.        $wordsResult->next();
  12.        array_push($usefulNumList, $this->getCleanNum($wordsResult->current()['words']));
  13.     }
  14. }
复制代码
需注意的地方请看一下代码注释,本身封装得很好,很容易理解和调用的
总结
到此这篇关于PHP数组迭代器的使用方法的文章就介绍到这了,更多相关PHP数组迭代器使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
                                                        
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
免责声明
1. 本论坛所提供的信息均来自网络,本网站只提供平台服务,所有账号发表的言论与本网站无关。
2. 其他单位或个人在使用、转载或引用本文时,必须事先获得该帖子作者和本人的同意。
3. 本帖部分内容转载自其他媒体,但并不代表本人赞同其观点和对其真实性负责。
4. 如有侵权,请立即联系,本网站将及时删除相关内容。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表