Как получить конкретное значение последнего элемента массива в php

#php #arrays #loops #codeigniter

Вопрос:

Я интегрирую многоступенчатую форму в php,и у меня есть список вопросов (в массиве), используя цикл,и я хочу, чтобы кнопка «отправить» отображалась в последнем вопросе, означает, например, что если есть 5 вопросов ( получение из базы данных), то всякий раз, когда возникает последний вопрос, должна быть кнопка «отправить» вместо «далее», Мой код не работает, если последний вопрос «ISSubQuestion», показывает мне кнопку «отправить» на первый вопрос вместо последнего вопроса (использование может видеть только один подзапрос из двух) Как я могу это сделать ? Вот мой массив,Где я ошибаюсь ?

 Array
(
    [0] => Array
        (
            [question] => Lorem Ipsum1.
            [ques_id] => 0
            [IsRatingQuestion] => 0
            [ISSubQuestion] => 
        )

    [1] => Array
        (
            [question] => Lorem Ipsum2.
            [IsRatingQuestion] => 1
            [ISSubQuestion] => 
       )

    [2] => Array
        (
           [question] => Lorem Ipsum3.
           [IsRatingQuestion] => 
            [ISSubQuestion] => 1
        )
)
 

Вот php-код

 //$rec containing array values ( coming from database)
foreach($rec as $key => $records)
    { 
                $record_last_end = $rec;
                $lastElement = array_key_last($record_last_end);
                $lastarray = array_values(array_slice($rec, -1))[0];
                if($key == $lastElement)
                { 
                
                ?>
                <input type="submit" name="submit" value="submit" class="next action-button" >  
                <?php } else { ?>   
                
                <input type="button" name="next" id="next1" class="next action-button" value="Next" />
                <?php }  ?> 
    }
 

Комментарии:

1. Помогло ли какое-либо из предложенных решений?

Ответ №1:

Это простое решение, которое не использует никаких дополнительных функций или итераций. Вы можете просто добавить счетчик $i и увеличивать его с каждым циклом.

В каждом цикле вы проверяете, соответствует ли значение $i == count($array) . Истинным условием будет последний элемент массива.

 $rec = array(
    0 => array(
        'question' => 'Lorem Ipsum1.',
        'ques_id' => 0,
        'IsRatingQuestion' => 0,
        'ISSubQuestion' => ''
    ),

    1 => array(
        'question' => 'Lorem Ipsum2.',
        'IsRatingQuestion' => 1,
        'ISSubQuestion' => ''
    ),

    2 => array(
        'question' => 'Lorem Ipsum3.',
        'IsRatingQuestion' => '',
        'ISSubQuestion' => 1
    )
);

$i = 0;
$arrayCount = count($rec);
foreach ($rec as $records) {
    $i  ;
    print_r($records);
    if ($i == $arrayCount) {
        ?>
        <input type="submit" name="submit"  value="submit" class="next action-button">
        <?php
    } else {
        ?>
        <input type="button" name="next" id="next1" class="next action-button" value="Next"/>
        <?php
    }
}
 

Рабочий пример http://sandbox.onlinephpfunctions.com/code/8f2bb50efd4cc17ecb33e5bf5843a1df213a23ba

Комментарии:

1. Он print_r($records) предназначен только для отображения выходных данных в сочетании со значениями массива. В реальном мире вы бы удалили его.

Ответ №2:

Вы манипулируете своим массивом после его получения из базы данных? попробуйте это:

 $record_last_end = array_values($rec);

$lastElement = array_key_last( $record_last_end);

$lastarray = array_slice($record_last_end , -1)[0];

foreach($record_last_end as $key => $records)
    {                
                if($key == $lastElement)
                { 
                
                ?>
                <input type="submit" name="submit" value="submit" class="next action-button" >  
                <?php } else { ?>   
                
                <input type="button" name="next" id="next1" class="next action-button" value="Next" />
                <?php }  ?> 
    }
 

Комментарии:

1. измените значение foreach($rec как $key => $records) на foreach($record_last_end как $key =>> $records)