Я работаю с файлами отслеживания активности. Я хочу просмотреть файл GPX и сделать что-то для каждой 1000-метровой вехи. Но устройство не обязательно записывает трек GPS прямо на 1000м, 2000м и т. Д., Поэтому я не могу использовать что-то вроде $distance % 1000
, То, что я хочу, это обнаруживать каждый раз, когда проходит 1000-метровый рубеж, выполняя действие сразу после этого этапа.
Вот пример отслеживаемого расстояния:
0
3
28
…
997
1003
1027
…
1998
2006
…
2989
3001
и так далее. В этом примере мне нужно будет выполнить действие, когда будет достигнуто 1003, затем 2006, а затем 3001.
Как я могу вызвать событие каждый раз, когда данные проходят кратное 1000?
Если ваши данные поступают в виде строки, вы можете разбить строку на любой разделитель, а затем зациклить его.
<?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
Если вы хотите разбить большой массив на маленькие массивы, каждый из которых имеет одинаковый размер, вы можете использовать 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)
}
}