Последняя итерация изменения кода цикла foreach в PHP - PullRequest
1 голос
/ 11 октября 2011

У меня есть блок кода, который отлично работает, чтобы получить данные о разных офисах.

То, что я хотел бы сделать, это сделать так, чтобы последняя итерация этого цикла сменила класс div на что-то другое, чтобы я мог применить другой набор стилей CSS.

$fields = get_group('Offices');

            foreach($fields as $field){
                echo'<div class="oloc">';
                if($locationVar==NULL || $locationVar!=$field['office-location'][1]) {
                    echo '<a name="' . strtolower(str_replace(' ', '-', $field['office-location'][1])) . '"></a><h3>' . $field['office-location'][1] . '</h3>';
                    $locationVar = $field['office-location'][1];
                } else {
                    echo "<br />";
                }

                if($field['office-gm'][1]){
                    echo '<div class="gm"><img src="http://maps.googleapis.com/maps/api/staticmap?center=' . $field['office-gm'][1] . '&zoom=9&size=250x250&markers=color:blue|label:A|' . $field['office-gm'][1] . '&sensor=false"></div>';
                }

                if($field['office-name'][1]){
                    echo '<strong>' . $field['office-name'][1] . '</strong><br /><br />';
                }

                if($field['office-phone'][1]){
                    echo 'Phone: ' . $field['office-phone'][1] . '<br />';
                }

                if($field['office-fax'][1]){
                    echo 'Fax: ' . $field['office-fax'][1] . '<br />';
                }

                if($field['office-address'][1]){
                    echo '<br />Address:<br />' . strip_tags($field['office-address'][1], '<br><br />') . '<br />';
                }

                if($field['office-webpage'][1]){
                    echo 'Web: ' . '<a href="' . $field['office-webpage'][1] . '">Office Webpage</a><br />';
                }

                if($field['office-email'][1]){
                    echo 'Email: ' . '<a href="' . $field['office-email'][1] . '">Office Email</a><br />';
                }
                if($field['office-emp'][1]){
                    echo 'Jobs: ' . '<a href="' . $field['office-emp'][1] . '">Employment Application</a><br />';
                }

                if($field['office-fb'][1]){
                    echo 'Facebook: ' . '<a href="' . $field['office-fb'][1] . '">Facebook</a><br />';
                }
                if($field['office_office_twitter'][1]){
                    echo 'Twitter: ' . '<a href="' . $field['office_office_twitter'][1] . '">Twitter</a><br />';
                } 
            echo '</div>';
            }

Ответы [ 4 ]

0 голосов
/ 11 октября 2011

В таких случаях вы можете использовать метод CachingIterator и hasNext():

$fields = get_group('Offices');

$it = new CachingIterator(new ArrayIterator($fields));
foreach($it as $field)
{
  ...
  if (!$it->hasNext()) echo 'Last:';
  ...
}
0 голосов
/ 11 октября 2011

Попробуйте это

$i = 0;
$total = count($fields);
$final = false;
foreach($fields as $field){

   $i++;
   $final = ($i + 1 == $total)? true : false;

   if($final)
       echo'<div class="NEW_CLASS">';
   else
       echo'<div class="oloc">';

   ....
}
0 голосов
/ 11 октября 2011

Сначала вы должны получить общее количество офисов, чтобы, когда вы находитесь на последней итерации, вы могли что-то с этим сделать.

$fields = get_group('Offices');
$fields_count = count($fields);

$i = 0;

foreach ($fields as $field) {

    $is_final = ++$i == $fields_count;

    echo '<div class="oloc' . ($is_final ? ' oloc-final' : '') . '">';    

    [...]

 }
0 голосов
/ 11 октября 2011

Поместите каждый эхо в VAR, это определение класса в другой VAR.Затем в конце каждого foreach вы проверяете так:

$i = 0;
foreach(...

if( $i == count($fields) ) { // change class }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...