【问题标题】:PHP array_slice() - ensuring the last the first and last elements are selectedPHP array_slice() - 确保选择最后一个和最后一个元素
【发布时间】:2017-01-04 11:45:48
【问题描述】:

我想知道是否有人有一种聪明的方法来确保在 array_slice 操作期间选择数组的最后一个元素。第一个元素很容易选择,但如果应用了偏移量,您无法确定最后一个元素是否被选中,除非您在循环后添加额外的 if else 逻辑。

例如这里是没有if else statement的问题的基础。

$latlong[] = [1,2];
$latlong[] = [3,4];
$latlong[] = [5,6];
$latlong[] = [7,8];
$latlong[] = [9,10];
$latlong[] = [11,12];
$latlong[] = [19,110];
$latlong[] = [21,132];

$off = 3;

for ($i=0; $i < count($latlong); $i+=$off){
    print_r(  array_slice($latlong, $i,1));
}

在此处的示例中,您将看到仅选择了 [1,2], [7,8], [19,110] 对,并且需要以其他方式包含最后一个元素 [21,132]

相关性是确保仅选择一定数量的“航路点”以保持在限制范围内,但第一个和最后一个元素包含在该限制中。

【问题讨论】:

  • 对于创建一定长度的块有array_chunk
  • 所以您的问题是,在切片时,如果偏移量超出数组的末尾,您希望它选择数组中的最后一个元素,而不是正确的?

标签: php arrays slice


【解决方案1】:

我确信还有其他方法可以计算模数,但这是可行的:

for ($i=0; $i < count($latlong); $i+=$off){
    $data[] = array_slice($latlong, $i,1);
    $last = $i;
}

var_dump(array_slice($latlong, $last+1));

如果我向数组中添加 2 个其他元素,它将为空。此外,您可能想看看 pythons xrange() 的 php 变体。

function xrange($start, $end, $step = 1){
  for ($i = $start; $i <= $end; $i += $step){
    yield $i;
  }
}

foreach(xrange(0, count($latlong), $off) as $last){
  $data[] = array_slice($latlong, $last,1);
}

var_dump(array_slice($latlong, $last+1));

【讨论】:

    【解决方案2】:

    对于您的示例,此代码有效:

    <?php
    $latlong[] = [1,2];
    $latlong[] = [3,4];
    $latlong[] = [5,6];
    $latlong[] = [7,8];
    $latlong[] = [9,10];
    $latlong[] = [11,12];
    $latlong[] = [19,110];
    $latlong[] = [21,132];
    
    $off = 3;
    
    for ($i=0; $i < count($latlong); $i+=$off){
    
        if(count($latlong) - $i <= $off){
            $last_element = end($latlong);
        }
        print_r(  array_slice($latlong, $i,1));
    }
    
    print_r($last_element);
    
    ?>
    

    if 语句,在这种情况下,会验证您是否在代码上设置了任何偏移量,$last_element 变量始终包含最后一个元素你的数组。

    【讨论】:

    • 是的,同意。我认为这是最好的方法。非常感谢。
    猜你喜欢
    • 2017-11-28
    • 1970-01-01
    • 2022-06-23
    • 2012-08-20
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 2016-07-24
    相关资源
    最近更新 更多