Мне интересно, есть ли у кого-нибудь умный способ убедиться, что последний элемент массива выбран во время операции 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]
нужно было бы включить каким-то другим способом.
Актуальность состоит в том, чтобы гарантировать, что только определенное количество «путевых точек» выбрано для того, чтобы оставаться в пределах лимита, но чтобы первый и последний элементы были включены в этот лимит.
Для вашего примера этот код работает:
<?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);
?>
если В этом случае оператор проверяет, установлено ли какое-либо смещение в вашем коде, $ last_element Переменная всегда содержит последний элемент вашего массива.
Я уверен, что есть другие способы, такие как вычисление модуля, но это работает:
for ($i=0; $i < count($latlong); $i+=$off){
$data[] = array_slice($latlong, $i,1);
$last = $i;
}
var_dump(array_slice($latlong, $last+1));
Если я добавлю 2 других элемента в массив, он будет пустым. Кроме того, вы можете взглянуть на php вариант python xrange ().
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));