设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 手机 数据 公司
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP数组迭代器的使用是啥样的

发布时间:2022-12-12 08:41 所属栏目:121 来源:互联网
导读:很多朋友都对PHP数组迭代器的使用是什么样的的内容比较感兴趣,对此小编整理了相关的知识分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获,那么感兴趣的朋友就继续往下看吧! 近来在开发一个视力筛查电子报告系统的产品,这个产品的作用是自动提
  很多朋友都对“PHP数组迭代器的使用是什么样的”的内容比较感兴趣,对此小编整理了相关的知识分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获,那么感兴趣的朋友就继续往下看吧!
 
  近来在开发一个视力筛查电子报告系统的产品,这个产品的作用是自动提取视力筛查过程中得到的屈光检查数据,并结合数据自动生成通俗易懂且专业的电子报告,以方便家长可以通过公众号或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 ( $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数组迭代器的使用是什么样的”的学习就结束了,希望能够解决大家的疑惑,另外大家动手实践也很重要,对大家加深理解和学习很有帮助。如果想要学习更多的相关知识,欢迎关注群英网络,小编每天都会给大家分享实用的文章!
 

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读