Tengo una matriz de precios como esta.
$arr = [200,201,203,205,207,300,209,212,0,211,0,0,301,213,214];Arriba está la lista de precios, donde hay algunos números impares como 0, 300, 301
Estoy tratando de eliminar esos números impares siguiendo el código
$fresharray = []; foreach($arr as $lol) { $diff = $lol-$arr[$i-1]; if($diff <-50 || $diff > 50) { } else { $fresharray[] = $lol; } $i++; }Básicamente, estoy comparando el número actual con el número anterior y si la diferencia es más de 50, lo excluyo de mi matriz fresca, pero mi problema es cuando hay dos 0 como 0,0 o 300,301... aquí la diferencia es 0 y -1 y su siendo agregado a mi matriz fresca. ¿Cómo elimino estos números impares de mi matriz de precios? Tenga en cuenta que el tamaño de mi matriz suele ser más de 1000. La solución puede ser en php o javascript. Gracias.
tenga en cuenta que el precio puede comenzar desde 200 y terminar en 400 también ... pero solo quiero verificar el número actual para el cual es desigual.
En primer lugar, dado que dice que hay un rango de precios, debe rodear el interior del foreach con un si que ignora los valores que están fuera de su rango, solucionando su problema donde un 0 hace que el siguiente valor se agregue a $fresharray :
if ($lol >= 200 && $lol <= 400) La definición de "último número" aquí es ambigua. Por lo que dijiste en la pregunta, parece que te refieres al número anterior en $arr. Para eso, solo necesita un valor al que se le asigne el valor de $lol al final del foreach, para que la próxima iteración pueda leerlo.
Además, pon $fresharray[] = $lol; dentro del if en lugar del else. En este momento, el código agrega $lol cuyo $diff no es <-50 ni >50. Esta es probablemente la razón por la que en una matriz que contiene [...,300,301,...] el 301 se agrega a $fresharray .
Este es el código resultante después de los cambios:
<?php $arr = [200, 201, 203, 205, 207, 300, 209, 212, 0, 211, 0, 0, 301, 213, 214]; $fresharray = []; $latest = $arr[0]; //Initialize $latest to avoid warnings foreach ($arr as $lol) { if ($lol >= 200 && $lol <= 400) { //Ignore prices outside range $diff = $lol - $latest; if ($diff < -50 || $diff > 50) { $fresharray[] = $lol; } $latest = $lol; } }