Cómo utilizar el iterador de matriz PHP

Recientemente, estamos desarrollando un producto de sistema de informes electrónicos de detección de la visión. La función de este producto es extraer automáticamente los datos del examen refractivo obtenidos durante el proceso de detección de la visión y combinar los datos para generar automáticamente un informe electrónico profesional y fácil de entender. Para comodidad de los padres, consúltelo a través de la cuenta oficial o el enlace H5.

Para cumplir con este requisito, el primer paso es realizar OCR en el informe en papel impreso desde el equipo de optometría. La interfaz de reconocimiento de imágenes devuelve una matriz bidimensional. La imagen original del informe es así: Los datos devueltos por la interfaz OCR es
Insertar descripción de la imagen aquí
así

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)
}

El requisito del sistema es extraer los dos números después de los dos números, que deben atravesarse a través de la matriz anterior, y luego extraer los dos elementos siguientes cuando encuentre los números, pero en foreach, si lo marca, espere hasta la próxima vez. Es problemático extraer los datos cuando llegan. ¿Puedo extraer directamente las siguientes dos cadenas después de encontrar la cadena *? En este momento, el concepto de iterador apareció en mi mente. Tal vez usé Python o Java antes. lo busqué durante el desarrollo, así que lo busqué y, efectivamente, ¡PHP también tiene iteradores! ! !

A continuación, miré brevemente los ejemplos en la documentación de PHP y comencé a trabajar en ello. Funcionó sin problemas y se completó en 5 minutos. Publicaré el código a continuación con comentarios simples para ayudar a todos a comprender:

$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']));
    }
}

Eche un vistazo a los comentarios del código para saber a qué debe prestar atención. Está bien encapsulado y es fácil de entender y llamar.

Supongo que te gusta

Origin blog.csdn.net/one_and_only4711/article/details/121124381
Recomendado
Clasificación