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

admin3年前PHP教程33

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

要实现这个需求,第一步是对验光设备里打印出来的纸质报告做ocr,图片识别接口返回的是二维数组,报告的原图是这样的:

ocr接口返回的数据是这样的

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
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分钟完工,下面把代码贴出来并辅以简单的注释帮助大家理解:

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$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数组迭代器使用内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:blog.csdn/one_and_only4711/article/details/121124381

免责声明:本文内容来自用户上传并发布,站点仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。请核实广告和内容真实性,谨慎使用。

相关文章

厦门高防服务器租用适合部署哪些行业

厦门高防服务器租用适合部署哪些行业?高防服务器一般用于提供更高级别的安全保障和防御能力,适用于需要更高安全性和防御能力的行业和应用场景。以下是一些适合部署高防服务器的行业:金融行业:金融行业对于数据安...

租用香港多ip服务器的一般步骤

香港多IP服务器是指在同一台服务器上使用多个IP地址。这可以提高服务器的灵活性和可靠性,使其更适合某些特定的应用程序和业务需求。例如,在进行SEO优化、加速网络访问、避免IP封锁等方面,香港多IP服务...

境外站群服务器有哪些

目前服务器的种类主要分为云服务器,CN2服务器,高防服务器,站群服务器等。站群服务器是一个比较特殊的产品,它可以提供大量独立的ip,更利于seo优化。站群服务器可以分为国内站群服务器以及境外站群服务器...

php fopen()函数案例详解

定义和用法fopen() 函数打开文件或者 URL。如果打开失败,本函数返回 FALSE。语法fopen(filename,mode,include_path,context)参数描述filename...

如何使用Laravel Eloquent来开发无限极分类

概述我们会创建一个微型项目来展示儿童商店的分类,总共有 5 级,如下:数据库迁移简单的数据表结构:只有一个 name 字段, 关联到其自身。所以,大部分父级分类 category_id = null,...

详解PHP设计模式之依赖注入模式

目的实现了松耦合的软件架构,可得到更好的测试,管理和扩展的代码用法DatabaseConfiguration 被注入 DatabaseConnection 并获取所需的 $config 。如果没有依赖...