2016-08-28 10 views
1

array_slice操作中に配列の最後の要素が確実に選択されているかどうかは疑問です。最初の要素は簡単に選択できますが、オフセットが適用されている場合は、ループの後に追加のif elseロジックを追加しないかぎり、最後の要素が選択されていることを確認できません。PHP array_slice() - 最初と最後の要素が最後に選択されていることを確認する

たとえば、ここには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]は、いくつかの他の方法を含める必要があるだろうことがわかります。

関連性は、特定の数の「ウェイポイント」が制限内に収まるように選択されていることを確認することですが、最初と最後の要素はその制限に含まれています。

+0

'length_chunk'があります。 –

+0

あなたの質問は、オフセットが配列の終わりを越えていれば、代わりに正しい配列の最後の要素を選択したいのですか? –

答えて

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); 

?> 

if文、あなたのコードに任意のオフセットを設定した場合、その場合には、検証し、$ last_element変数常に配列の最後の要素が含まれています。

+0

はい、同意します。私はこれが最良の方法だと思う。どうもありがとう。 – TrueBlue

0

私はモジュラスを計算するような他の方法があると確信しているが、これは動作します:

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)); 
関連する問題