1. ホーム
  2. php

[解決済み] 配列の反復処理中に、現在の要素が最後の要素であるかどうかをチェックします。

2023-06-21 22:41:17

質問

この擬似コードを本当のPHPコードに翻訳するのを手伝ってください。

 foreach ($arr as $k => $v)
    if ( THIS IS NOT THE LAST ELEMENT IN THE ARRAY)
        doSomething();

編集:配列は数値または文字列のキーを持つことができます。

どのように解決するのですか?

を使用すると、PHPの end()

$array = array('a' => 1,'b' => 2,'c' => 3);
$lastElement = end($array);
foreach($array as $k => $v) {
    echo $v . '<br/>';
    if($v == $lastElement) {
         // 'you can do something here as this condition states it just entered last element of an array'; 
    }
}

更新1

Mijojaさんご指摘の通り、配列に同じ値が複数回ある場合、上記の方法では問題があります。

$array = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 2);
//point to end of the array
end($array);
//fetch key of the last element of the array.
$lastElementKey = key($array);
//iterate the array
foreach($array as $k => $v) {
    if($k == $lastElementKey) {
        //during array iteration this condition states the last element.
    }
}

更新2

配列の内部ポインタを変更しないので、@onteria_ さんの解答が私の解答より優れていることがわかりましたので、彼の解答に合うように解答を更新しています。

$array = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 2);
// Get array keys
$arrayKeys = array_keys($array);
// Fetch last array key
$lastArrayKey = array_pop($arrayKeys);
//iterate array
foreach($array as $k => $v) {
    if($k == $lastArrayKey) {
        //during array iteration this condition states the last element.
    }
}

ありがとうございます @onteria_

更新3

CGundlach さんの指摘により、PHP 7.3 で導入されました。 array_key_last が導入され、PHP 7.3を使用している場合は、より良い選択肢になると思われます。

$array = array('a' => 1,'b' => 2,'c' => 3);
$lastKey = array_key_last($array);
foreach($array as $k => $v) {
    echo $v . '<br/>';
    if($k == $lastKey) {
         // 'you can do something here as this condition states it just entered last element of an array'; 
    }
}