2016-11-17 1 views
-3

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

Ниже приведен пример расстояния отслеживаемой:

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

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

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

+0

в какой форме вы получаете расстояние от устройства? – Viral

+2

код говорит громче слов –

ответ

2

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

<?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 
+0

Это именно то, что мне нужно! Это довольно просто, но я обещаю, что потянул на это волосы. Спасибо @Blinkydamo;] (Мне нужно подождать 3 минуты, чтобы принять ваш ответ) – feub

1

Если вы хотите, чтобы разделить большой-массив на небольшие массивы, каждый в том же размере, вы можете использовать array_chunk function:

$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) 
    } 
} 
+0

Моя проблема была другая, но спасибо за ваше время @Dekel – feub

+2

Добро пожаловать. В следующий раз, пожалуйста, объясните (с помощью ввода/вывода/псевдокода) то, что вы пытаетесь сделать – Dekel

+0

, в этом случае код привел бы к путанице, я думаю, проблема была не в самом коде, а в том, как это сделать Я попытался объяснить. – feub

Смежные вопросы