關於PHP數組迭代器的使用方法實例

近來在開發一個視力篩查電子報告系統的產品,這個產品的作用是自動提取視力篩查過程中得到的屈光檢查數據,並結合數據自動生成通俗易懂且專業的電子報告,以方便傢長可以通過公眾號或H5鏈接查閱。

要實現這個需求,第一步是對驗光設備裡打印出來的紙質報告做OCR,圖片識別接口返回的是二維數組,報告的原圖是這樣的:

OCR接口返回的數據是這樣的

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分鐘完工,下面把代碼貼出來並輔以簡單的註釋幫助大傢理解:

$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數組迭代器使用內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: