2016-11-17 84 views
-3

我正在处理活动跟踪文件。我想浏览GPX文件并为每1000米里程碑做一些事情。但该设备不一定在1000米,2000米等处记录GPS轨迹,所以我不能使用类似$distance % 1000之类的东西。我想要的是每当1000米里程碑已经过去时,通过在刚刚完成的里程碑处执行操作来检测。循环遍历一个整数数组,每1000个循环打破

这里是跟踪的距离的例子:

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

等。在这个例子中,当达到1003,然后是2006,然后是3001时,我需要执行一个操作。

如何在每次数据通过1000的倍数时触发事件?

+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