近来在开发一个视力筛查电子报告系统的产品,这个产品的作用是自动提取视力筛查过程中得到的屈光检查数据,并结合数据自动生成通俗易懂且专业的电子报告,以方便家长可以通过公众号或h5链接查阅。
要实现这个需求,第一步是对验光设备里打印出来的纸质报告做ocr,图片识别接口返回的是二维数组,报告的原图是这样的:
 
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($wordsresultas$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数组迭代器的使用是什么样的”的学习就结束了,希望能够解决大家的疑惑,另外大家动手实践也很重要,对大家加深理解和学习很有帮助。如果想要学习更多的相关知识,欢迎关注群英网络,小编每天都会给大家分享实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
 
                        长按识别二维码并关注微信
更方便到期提醒、手机管理