PHP: Как получить последний элемент массива в одном массиве - PullRequest
1 голос
/ 20 апреля 2020

Я пытаюсь создать функцию, чтобы проверить, является ли элемент массива последним элементом массива в одном массиве. Исходный массив выглядит так:

array(1001,
      1002,
      array('exam'=>true, 'index'=>10),
      1003,
      1004,
      1005,
      array('exam'=>true, 'index'=>20),
      1006,
      1007,
      array('exam'=>true, 'index'=>30),
      1008,
      1009
)

В этом случае я могу доказать, является ли "массив ('exam' => true, 'index' => 30)" последним.

У меня есть позиция индекса этого элемента, но я не знаю, как проверить, является ли это последним элементом массива.

    function is_last_exam_in_survey($array, $exam_position) {

      foreach($array as $element) {
        if(!is_numeric($element) {
          // check if that is the last array element in array

          //return true;
        } else {
          // return false;
        }
      }

    }

Буду признателен за любой совет:)

Ответы [ 6 ]

0 голосов
/ 20 апреля 2020

Как насчет использования array_slice для извлечения значений в массиве после позиции, которую вы просматриваете, затем array_filter для удаления любых значений, которые не являются массивами , Если остались какие-либо значения, то рассматриваемая вами запись не является последней записью в массиве.

Это может быть не очень эффективно, если вы часто вызываете его с большим массивом. Может быть, лучше переосмыслить способ хранения или загрузки данных в массив.

function is_last_exam_in_survey($array, $exam_position)
{
    return isset($array[$exam_position])
        && is_array($array[$exam_position])
        && !array_filter(array_slice($array, $exam_position + 1), 'is_array');
}
0 голосов
/ 20 апреля 2020

Я думаю, вы можете использовать функцию array_column, чтобы сделать это

function is_last_exam_in_survey($array,$exam_position){

    $ac = array_column($array, 'index'); // return array(10,20,30) 
    $la = $ac[count($ac) - 1]; // 30 

    foreach ($array as $element) {
        if (!is_numeric($element)) {
            // check if $element['index'] === 30
            if($element['index'] === $la){
                return true;
            }
        }
    }
}
0 голосов
/ 20 апреля 2020

этого решения избегайте l oop. сначала мы узнаем последний индекс массива. Затем мы используем функцию is_array () для проверки, является ли последний элемент массивом или нет.

function get_last_exam_in_survey(array $arr)
{
  $lastOfset = count($arr) - 1;
  if(is_array($arr[$lastOfset])){
    return true;
  }else{
    return false;
  }
}
0 голосов
/ 20 апреля 2020

Я бы перевернул массив и посмотрел на первый элемент. Что-то вроде:

function is_last_exam_in_survey($array, $exam_position) {   
  foreach(array_reverse($array) as $element) {
    if(!is_numeric($element) {
      return $element['index'] === $exam_position;
    }
  }
  return false;  
}

Мне кажется, самое эффективное и простое решение.

0 голосов
/ 20 апреля 2020

Я думаю, что это было бы самым быстрым решением:

function is_last_exam_in_survey($array, $exam_position) {
    $last_index = array_key_last( $array );

    if( $exam_position == $last_index ){
        return true;
    }else{
        return false;
    }

}

Вы все еще можете изменить условный оператор, если вы пытаетесь сравнить значения из последнего элемента, например:

if( isset($last_index['index']) && $exam_position == $last_index['index'] ){

Также, если вы хотите получить последнее значение массива вместо ключа, вы можете использовать это:

$last_index = end( $array );
0 голосов
/ 20 апреля 2020
function get_last_exam_in_survey($array) {
  $last = null;
  foreach($array as $element) {
    if(is_array($element) && !empty($element['exam'])) {
      $last = $element;
    }
  }
  return $last;
}


function is_last_exam_in_survey($array, $exam_position) {
  $last_exam = get_last_exam_in_survey($array);
  return !empty($last_exam) && ($last_exam['index']==$exam_position);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...