關(guān)于PHP數(shù)組迭代器的使用方法實(shí)例
近來(lái)在開(kāi)發(fā)一個(gè)視力篩查電子報(bào)告系統(tǒng)的產(chǎn)品,這個(gè)產(chǎn)品的作用是自動(dòng)提取視力篩查過(guò)程中得到的屈光檢查數(shù)據(jù),并結(jié)合數(shù)據(jù)自動(dòng)生成通俗易懂且專業(yè)的電子報(bào)告,以方便家長(zhǎng)可以通過(guò)公眾號(hào)或H5鏈接查閱。
要實(shí)現(xiàn)這個(gè)需求,第一步是對(duì)驗(yàn)光設(shè)備里打印出來(lái)的紙質(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) "" } [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) " " } [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)便提取接下來(lái)的兩個(gè)元素,但在foreach里面,如果做標(biāo)記,等下次進(jìn)來(lái)時(shí)再提取數(shù)據(jù)比較麻煩,能不能在遇到*號(hào)字符串后,直接提取接下來(lái)的兩個(gè)字符串呢,這時(shí)我的腦海里出現(xiàn)了迭代器的概念,可能是之前用Python或java開(kāi)發(fā)時(shí)接觸到的吧,于是搜索了一下,果然PHP也是有迭代器的?。?!
接下來(lái)簡(jiǎn)單看了一下PHP文檔中的示例,就開(kāi)始干了,很順利,5分鐘完工,下面把代碼貼出來(lái)并輔以簡(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í)別出來(lái)的,要把指針向后挪一位 $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)文章希望大家以后多多支持腳本之家!
版權(quán)聲明:
本站所有文章和圖片均來(lái)自用戶分享和網(wǎng)絡(luò)收集,文章和圖片版權(quán)歸原作者及原出處所有,僅供學(xué)習(xí)與參考,請(qǐng)勿用于商業(yè)用途,如果損害了您的權(quán)利,請(qǐng)聯(lián)系網(wǎng)站客服處理。