当前位置:首页 > PHP教程 > php数组 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2022-05-17 15:25:05 浏览: 评论:0 

在PHP的日常操作中,数组是最常出现的结构,而我们几乎每天都在处理数组相关的内容,这篇文章主要给大家介绍了关于PHP数组迭代器的使用方法,需要的朋友可以参考下

近来在开发一个视力筛查电子报告系统的产品,这个产品的作用是自动提取视力筛查过程中得到的屈光检查数据,并结合数据自动生成通俗易懂且专业的电子报告,以方便家长可以通过公众号或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) 

而系统的需求是提取两个号后面的两个数字,那肯定是对上述数组做遍历处理,然后遇到号便提取接下来的两个元素,但在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.     } 

需注意的地方请看一下代码注释,本身封装得很好,很容易理解和调用的。

Tags: PHP数组迭代器

分享到: