關(guān)于PHP數(shù)組迭代器的使用方法實(shí)例
近來在開發(fā)一個(gè)視力篩查電子報(bào)告系統(tǒng)的產(chǎn)品,這個(gè)產(chǎn)品的作用是自動(dòng)提取視力篩查過程中得到的屈光檢查數(shù)據(jù),并結(jié)合數(shù)據(jù)自動(dòng)生成通俗易懂且專業(yè)的電子報(bào)告,以方便家長(zhǎng)可以通過公眾號(hào)或H5鏈接查閱。
要實(shí)現(xiàn)這個(gè)需求,第一步是對(duì)驗(yàn)光設(shè)備里打印出來的紙質(zhì)報(bào)告做OCR,圖片識(shí)別接口返回的是二維數(shù)組,報(bào)告的原圖是這樣的:

OCR接口返回的數(shù)據(jù)是這樣的
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)
}
而系統(tǒng)的需求是提取兩個(gè)號(hào)后面的兩個(gè)數(shù)字,那肯定是對(duì)上述數(shù)組做遍歷處理,然后遇到號(hào)便提取接下來的兩個(gè)元素,但在foreach里面,如果做標(biāo)記,等下次進(jìn)來時(shí)再提取數(shù)據(jù)比較麻煩,能不能在遇到*號(hào)字符串后,直接提取接下來的兩個(gè)字符串呢,這時(shí)我的腦海里出現(xiàn)了迭代器的概念,可能是之前用python或java開發(fā)時(shí)接觸到的吧,于是搜索了一下,果然PHP也是有迭代器的?。?!
接下來簡(jiǎn)單看了一下PHP文檔中的示例,就開始干了,很順利,5分鐘完工,下面把代碼貼出來并輔以簡(jiǎn)單的注釋幫助大家理解:
$usefulNumList = [];
$wordsResult = new \ArrayIterator($wordsResult);//初始化數(shù)組迭代器,傳入數(shù)組變量
foreach($wordsResult as $item){
$tempWords = $item['words'];
if(strpos($tempWords, '*') !== false){
if($tempWords === '*'){//有時(shí)候,*號(hào)會(huì)單獨(dú)識(shí)別成一個(gè)字符串,有時(shí)候會(huì)和后面的數(shù)字識(shí)別到一起,如果是單獨(dú)識(shí)別出來的,要把指針向后挪一位
$wordsResult->next();//實(shí)現(xiàn)方法是: 數(shù)組變更名->next()方法
}
//注意,調(diào)用了next()方法后,不能再用$item去取數(shù)組元素值,要用current()方法才能取到"下一個(gè)值"
array_push($usefulNumList, $this->getCleanNum($wordsResult->current()['words']));
$wordsResult->next();
array_push($usefulNumList, $this->getCleanNum($wordsResult->current()['words']));
}
}
需注意的地方請(qǐng)看一下代碼注釋,本身封裝得很好,很容易理解和調(diào)用的
總結(jié)
到此這篇關(guān)于PHP數(shù)組迭代器的使用方法的文章就介紹到這了,更多相關(guān)PHP數(shù)組迭代器使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用session判斷用戶登錄用戶權(quán)限(超簡(jiǎn)單)
本篇文章是對(duì)session判斷用戶登錄用戶權(quán)限進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
PHP下操作Linux消息隊(duì)列完成進(jìn)程間通信的方法
當(dāng)我們開發(fā)的系統(tǒng)需要使用多進(jìn)程方式運(yùn)行時(shí),進(jìn)程間通信便成了至關(guān)重要的環(huán)節(jié)。消息隊(duì)列(message queue)是Linux系統(tǒng)進(jìn)程間通信的一種方式。2010-07-07
php下載遠(yuǎn)程文件類(支持?jǐn)帱c(diǎn)續(xù)傳)
1.功能:支持?jǐn)帱c(diǎn)續(xù)傳的下載,能計(jì)算傳輸率,能控制傳輸率2008-11-11
利用PHP實(shí)現(xiàn)詞法分析器與自定義語(yǔ)言
這篇文章主要為大家詳細(xì)介紹了潤(rùn)滑利用PHP實(shí)現(xiàn)詞法分析器與自定義語(yǔ)言,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動(dòng)手嘗試一下2022-08-08
PHP+Ajax實(shí)現(xiàn)無刷新分頁(yè)實(shí)例詳解(附demo源碼下載)
這篇文章主要介紹了PHP+Ajax實(shí)現(xiàn)無刷新分頁(yè)的方法,以完整實(shí)例形式詳細(xì)分析了PHP結(jié)合ajax實(shí)現(xiàn)無刷新分頁(yè)的具體步驟與相關(guān)技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下2016-04-04
ajax php 實(shí)現(xiàn)寫入數(shù)據(jù)庫(kù)
看到同學(xué)背詞用的生詞本,覺得很不錯(cuò).正好自己也在看書,為了有一個(gè)好的效果,于是想做一個(gè)類似生詞本的,可以存知識(shí)點(diǎn),和查看知識(shí)點(diǎn)的.2009-09-09
php簡(jiǎn)單創(chuàng)建zip壓縮文件的方法
這篇文章主要介紹了php簡(jiǎn)單創(chuàng)建zip壓縮文件的方法,實(shí)例分析了php基于ZipArchive實(shí)現(xiàn)文件壓縮的相關(guān)技巧,需要的朋友可以參考下2016-04-04
php抓取并保存網(wǎng)站圖片的實(shí)現(xiàn)代碼
這篇文章主要介紹了php抓取并保存網(wǎng)站圖片的實(shí)現(xiàn)代碼,網(wǎng)頁(yè)源代碼捕獲,圖片鏈接獲取、分析、并將同樣的圖片鏈接合并功能。功能很全面,需要的朋友可以參考下2015-10-10

