web-dev-qa-db-ja.com

PHP-foreachを使用して最初の要素を取得する

Foreachループで最初の反復を取得するのに適した方法は何だろうと思います。最初のイテレーションで何か違うことをしたい。

これらの場合、条件付きが最良の選択肢ですか?

25
MEM

はい、オブジェクトを別の方法で移動できない場合(通常のforループ)、この場合は条件を使用します。

$first = true;
foreach ( $obj as $value )
{
    if ( $first )
    {
        // do something
        $first = false;
    }
    else
    {
        // do something
    }

    // do something
}
72
poke

さらにエレガントに:

foreach($array as $index => $value) {
 if ($index == 0) {
      echo $array[$index];
 }
}

この例は、PHPの組み込み配列機能/関数を追加するか、キーを適切な数値順に手動で指定する場合にのみ機能します。

ここに記載されている他のアプローチとは異なり、任意のPHP配列の自然な順序で動作するはずです。

$first = array_shift($array);
//do stuff with $first

foreach($array as $elem) {
 //do stuff with rest of array elements
}

array_unshift($array, $first);     //return first element to top
35
Klinky

次のように、単純にカウンターを開始に追加できます。

$i = 0;

foreach($arr as $a){
 if($i == 0) {
 //do ze business
 }
 //the rest
 $i++;
}
10
Russell Dias

この投稿をもたらした検索結果セットの ブログ投稿 でこの解決策を見ましたが、かなりエレガントだと思いました。おそらく処理に少し重いですが。

foreach ($array as $element) 
{
    if ($element === reset($array))
        echo 'FIRST ELEMENT!';

    if ($element === end($array))
        echo 'LAST ELEMENT!';
}

投稿には、配列の値が一意の場合にのみ機能するという警告もあります。最後の要素が「world」で、途中のランダムな要素も「world」の場合、最後の要素は2回実行されます。

6
danielson317
first = true
foreach(...)
    if first
        do stuff
        first = false
3
dutt

hm

<?php
$i = 0;
foreach($ar as $sth) {
    if($i++ == 0) {
        // do something
    }
    // do something else
}

よりエレガント。

2
janoliver

これも機能します

foreach($array as $element) {
    if ($element === reset($array))
        echo 'FIRST ELEMENT!';

    if ($element === end($array))
        echo 'LAST ELEMENT!';
}
2
omukiguy
foreach($array as $element) {
    if ($element === reset($array))
        echo 'FIRST ELEMENT!';

    if ($element === end($array))
        echo 'LAST ELEMENT!';
}
2