【问题标题】:Loop through an array of integers and break every 1000 [closed]循环遍历整数数组并每隔 1000 中断一次 [关闭]
【发布时间】:2017-04-01 03:45:46
【问题描述】:

我正在处理活动跟踪文件。我想浏览一个 GPX 文件并为每 1000m 里程碑做一些事情。但是该设备不一定会在 1000m、2000m 等处记录 GPS 轨迹,所以我不能使用像 $distance % 1000 这样的东西。我想要的是通过在里程碑之后执行一个动作来检测每次 1000m 里程碑过去的时间。

以下是跟踪距离的示例:

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

等等。在此示例中,我需要在达到 1003、2006 和 3001 时执行操作。

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

【问题讨论】:

  • 您以什么形式从设备接收距离?
  • 代码胜于雄辩

标签: php loops foreach iteration gpx


【解决方案1】:

如果您的数据以字符串形式出现,那么您可以通过分隔符来分解字符串,然后循环它。

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

【讨论】:

  • 这正是我所需要的!这很简单,但我保证我在这上面扯了我的头发。谢谢@Blinkydamo ;](我需要等待 3 分钟才能接受您的回答)
【解决方案2】:

如果你想将一个大数组拆分成多个小数组,每个数组大小相同,你可以使用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)
  }
}

【讨论】:

  • 我的问题有所不同,但感谢您抽出宝贵时间@Dekel
  • 不客气。下次请解释(使用输入/输出/伪代码)您要做什么
  • 在这种情况下,我猜代码只会带来混乱,问题不在于代码本身,而在于我试图解释的方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-14
  • 2016-01-31
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
相关资源
最近更新 更多