(Вопрос начинающего) Повторять массив в PHP, добавляя только запятую на основе определенных условий - PullRequest
0 голосов
/ 28 июня 2010

Так что это довольно просто, я знаю!Извините, только один из тех дней.

У меня есть массив тегов, собранных из базы данных.В этом массиве может быть любое количество тегов.Тем не менее, я хочу вывести только 4.

Так что в настоящее время у меня есть этот код:

$iteration = 0;
foreach ($tagarray as $tag) { ?>
<div class="tagbutton listv">
<span><?php echo $tag; ?></span>,
</div>  
<?php 
$iteration++;
    if ($iteration == 4) {
        break;
    }
} ?>

Вы увидите после </span> запятую ,.Очевидно, это выглядит странно, если результат выглядит так:

tag1, tag2, tag3,

с запятой.Поэтому я подумал, что могу поставить это там, где запятая сейчас:

<?php if ($iteration < count($tagarray) {echo ",";} ?>

Это работает, но только тогда, когда число $tagarray больше 4 или что-то еще.И, как я уже сказал, $ tagarray может иметь любое значение.

Я также пытался

<?php if ($iteration == 0 || $iteration == 1 || $iteration == 2 || $iteration == 3) {echo ",";}?>

, который, хотя и повторяющийся, должен работать, но не работаетПотому что $ tagarray может содержать 2 тега и, следовательно, по-прежнему иметь запятую.

Я понимаю, что это, вероятно, простая, но эй, я действительно ценю помощь!

Спасибо!

Джек

Ответы [ 5 ]

4 голосов
/ 28 июня 2010

Вы можете буферизовать свой вывод (теги). Допустим, вы положили их в массив

array_push($myTags, '<span>'.$tag.'</span>');

Когда вы хотите показать их, вы просто implode(",", $myTags).

Или вы можете буферизовать их в строку, а затем substr() в этой строке, пока не избавитесь от последней запятой. Лично я бы предложил массив.

2 голосов
/ 28 июня 2010

Использование implode лучше для вывода подобных вещей в строку, а array_slice можно использовать для возврата первых четырех элементов. Предполагая, что ваш массив называется tagarray:

echo "<span>" . implode("</span>,<span>", array_slice($tagarray,0,4)) . "</span>";

Очевидно, изменив «клей» на то, что вы хотите. Это устраняет необходимость в цикле foreach и может быть быстрее.

1 голос
/ 28 июня 2010

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

// take 4 elements
$firstelements=array_slice( $tags, 0, 4 );

// how to transform an element
function tag_span($tag) {
    return "<span>$tag</span>";
}

// transform all needed elements
$spans=array_map( tag_span, $firstelements );

// join them together
$result=implode( ", ", $spans );

// output the result
echo $result;
0 голосов
/ 28 июня 2010

Решение на основе вашего кода будет

$iteration = 0;
$processarr = array_slice($tagarray,0,4);   //get tags you need,4 or less
foreach ($processarr as $tag) { ?> 
<div class="tagbutton listv"> 
<span><?php echo $tag; ?></span>, 
</div>   
<?php  
$iteration++;
if($iteration < count($processarr)) echo ",";
}?> 
0 голосов
/ 28 июня 2010

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

$iteration = 0;
$first=true;
foreach ($tagarray as $tag) { ?>
<div class="tagbutton listv">
<span><?php 
if($first){$first=false;}
else{echo ",";}
 echo $tag; 
?></span>
</div>  
<?php 
$iteration++;
    if ($iteration == 4) {
        break;
    }
} ?>

Если вы хотите использовать библиотечные функции, используйте implode в соответствии с рекомендациями Cetra и Bogdan.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...