Как получить только один результат из foreach (PHP)

Код закодирует массив и отображает все представления для пользователя. Теперь все изменилось, и мне просто нужно отобразить один результат из цикла foreach. Как мне это сделать?

<table class="report_edits_table"> <thead> <tr class="dates_row"> <?php foreach($report['edits'] as $report_edit) : ?> <td colspan="2" report_edit_id="<?php echo $report_edit['id'] ?>"><div class="date_container"> <?php if($sf_user->hasCredential(Attribute::COACHING_EDIT_ACCESS)) : ?> <span class="ui-icon ui-icon-trash">Remove</span> <?php endif?> <?php echo "View " . link_to($report_edit['created'], sprintf('coaching/viewReportEdit?reportedit=%s', $report_edit['id']), array('title' => 'View This Contact')) ?> </div></td> <?php endforeach ?> </tr> </thead> <tbody> <?php foreach($report['edits_titles'] as $index => $title) : ?> <tr class="coach_row"> <?php for ($i=max(0, count($report['edits'])-2); $i<count($report['edits']); $i++) : $report_edit = $report['edits'][$i] ?> <td class="name_column"><?php echo $title ?></td> <td class="value_column"><?php echo $report_edit[$index] ?></td> <?php endfor ?> </tr> <?php endforeach ?> </tbody> 

Используйте команду break для простого преобразования:

 <?php for ... ?> ... stuff here ... <?php break; ?> <?php endfor ... ?> 

Лучшим решением было бы полностью удалить foreach .

Похоже, вы хотите захватить первый элемент из массива, не зацикливая остальные.

PHP предоставляет набор функций для таких ситуаций.

Чтобы получить первый элемент в массиве, начните с использования функции reset() чтобы поместить указатель массива в начало массива, затем используйте функцию current() чтобы прочитать элемент, на который смотрит указатель.

Таким образом, ваш код будет выглядеть так:

 <?php reset($report['edits']); $report_edit = current($report['edits']); ?> 

Теперь вы можете работать с $report_edits без использования цикла foreach() .

(обратите внимание, что указатель массива действительно начинается по умолчанию в первой записи, поэтому вы можете пропустить вызов reset() , но лучше не делать этого, потому что он может быть изменен в другом месте вашего кода, если вы не осознаете его)

Если после этого вы хотите перейти к следующей записи, вы можете использовать функцию next() . Как вы можете видеть, если бы вы захотели, теоретически было бы возможно использовать эти функции для записи альтернативного типа цикла foreach() . Там не было бы никакого смысла использовать их таким образом, но это возможно. Но они позволяют более мелкомасштабный контроль над массивом, что удобно для таких ситуаций, как ваш.

Надеюсь, это поможет.

Множество способов

  1. Прямой доступ к индексу элемента массива
  2. Обновлять любую логику, извлекает / генерирует массив, чтобы возвращать только интересующий элемент
  3. Используйте цикл for, который завершается после одного цикла
  4. array_filter ваш массив, чтобы получить интересующий элемент
  5. Перерыв в конце вашего цикла foreach, так что он заканчивается после первой итерации
  6. Условно проверьте свой индекс в цикле foreach и только разметку вывода, если индекс соответствует интересующему элементу
  7. И так далее

Я бы порекомендовал просто получить интересующий элемент массива (номер 2 в списке), поскольку это означает, что меньше данных подскакивает вокруг вашего кода (и, вероятно, между вашим блоком PHP и базой данных, если вы заполняете массив с SQL-сервера)

Простейший метод?

Поместите break в качестве последней строки вашего foreach. Он будет выполняться один раз, а затем выйти. (Пока какой элемент вы останавливаете, не имеет значения).

Вторичный метод: используйте array_pop или array_shift для вашего $report['edits'] или $report['edits_titles'] чтобы получить элемент, потерять цикл for и ссылаться на только что извлеченный элемент.

Например:

 // // current // foreach ($report['edits'] as $report_edit) : /* markup */ endforeach; // // modified version // $report_edit = array_shift($report['edits']); /* markup */ 

Используйте <?php break ?> Перед <?php endforeach ?>

 example :: <?php foreach ($this->oFuelData AS $aFuelData ) { echo $aFuelData['vehicle']; break; } ?> 

Вы также можете использовать его для справки

  foreach($array as $element) { if ($element === reset($array)) echo $element; if ($element === end($array)) echo $element; }