Checking during array iteration, if the current element is the last element

后端 未结 8 2016
迷失自我
迷失自我 2020-12-13 03:41

Please help me to translate this pseudo-code to real php code:

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


        
8条回答
  •  一生所求
    2020-12-13 03:50

    you can use PHP's end()

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

    Update1

    as pointed out by @Mijoja the above could will have problem if you have same value multiple times in array. below is the fix for it.

    $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.
        }
    }
    

    Update2

    I found solution by @onteria_ to be better then what i have answered since it does not modify arrays internal pointer, i am updating the answer to match his answer.

    $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.
        }
    }
    

    Thank you @onteria_

    Update3

    As pointed by @CGundlach PHP 7.3 introduced array_key_last which seems much better option if you are using PHP >= 7.3

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

提交回复
热议问题