массивы — PHP array_slice () — гарантирует, что последние, первый и последний элементы выбраны

Мне интересно, есть ли у кого-нибудь умный способ убедиться, что последний элемент массива выбран во время операции 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] нужно было бы включить каким-то другим способом.

Актуальность состоит в том, чтобы гарантировать, что только определенное количество «путевых точек» выбрано для того, чтобы оставаться в пределах лимита, но чтобы первый и последний элементы были включены в этот лимит.

1

Решение

Для вашего примера этот код работает:

<?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 Переменная всегда содержит последний элемент вашего массива.

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 других элемента в массив, он будет пустым. Кроме того, вы можете взглянуть на 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));
0

По вопросам рекламы [email protected]