Перебрать массив целых чисел и разбить каждую 1000

Я работаю с файлами отслеживания активности. Я хочу просмотреть файл GPX и сделать что-то для каждой 1000-метровой вехи. Но устройство не обязательно записывает трек GPS прямо на 1000м, 2000м и т. Д., Поэтому я не могу использовать что-то вроде $distance % 1000, То, что я хочу, это обнаруживать каждый раз, когда проходит 1000-метровый рубеж, выполняя действие сразу после этого этапа.

Вот пример отслеживаемого расстояния:

0
3
28
…
997
1003
1027
…
1998
2006
…
2989
3001

и так далее. В этом примере мне нужно будет выполнить действие, когда будет достигнуто 1003, затем 2006, а затем 3001.

Как я могу вызвать событие каждый раз, когда данные проходят кратное 1000?

-3

Решение

Если ваши данные поступают в виде строки, вы можете разбить строку на любой разделитель, а затем зациклить его.

<?php
$string = "0 3 28 36 42 66 73 80 103 125 997 1003 1027 2006 3001";
$data= explode( ' ', $string );

$multiple = 1;
foreach( $data as $value )
{
if( (int)$value > ( 1000 * $multiple ) )
{
// Passed a 1000 marker
echo $value."\n";
$multiple++;
}
}

Выход:

1003
2006
3001
2

Другие решения

Если вы хотите разбить большой массив на маленькие массивы, каждый из которых имеет одинаковый размер, вы можете использовать array_chunk функция:

$ar = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var_dump(array_chunk($ar, 2));

выход:

array(5) {
[0]=>
array(2) {
[0]=>
int(1)
[1]=>
int(2)
}
[1]=>
array(2) {
[0]=>
int(3)
[1]=>
int(4)
}
[2]=>
array(2) {
[0]=>
int(5)
[1]=>
int(6)
}
[3]=>
array(2) {
[0]=>
int(7)
[1]=>
int(8)
}
[4]=>
array(1) {
[0]=>
int(9)
}
}
1

По вопросам рекламы [email protected]