关于PHP数组迭代器的使用方法实例
近来在开发一个视力筛查电子报告系统的产品,这个产品的作用是自动提取视力筛查过程中得到的屈光检查数据,并结合数据自动生成通俗易懂且专业的电子报告,以方便家长可以通过公众号或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数组迭代器使用内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/one_and_only4711/article/details/121124381
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。