2010-05-19 15 views
8

Mam ten prosty dla pętli echo tablicy:PHP: Wyświetlaj przecinek po każdym elemencie z wyjątkiem ostatniego. Korzystanie „dla” oświadczenia i nie „implode/eksplodować”

for ($i = 0; $i < count($director); $i++) { 
    echo '<a href="person.php?id='.$director[$i]["id"].'">'.$director[$i]["name"].'</a>'; 
} 

Tutaj problemem jest to, że gdy więcej niż jeden element jest w tablicy potem dostać wszystko echo bez żadnej przerwy między. Chcę oddzielić każdy element przecinkiem oprócz ostatniego.

Nie mogę korzystać implode więc szukam innego rozwiązania

+1

odpowiedź Tom Haigh powinno działać. Lub po prostu usuń ostatni znak z wynikowego ciągu znaków (ale może nie być tak czystym sposobem;)). –

+0

@SilentGhost: Dlaczego oznaczyłeś to zadanie domowe? Jeśli z powodu stwierdzenia * Nie mogę użyć 'implode' *: OP uzyskuje dostęp do tablicy, więc potrzebuje pętli. 'implode' działa tylko wtedy, gdy masz już tablicę elementów, które" implodują "(oczywiście można wcześniej wygenerować listę kodu HTML, a następnie implodować, ale wydaje mi się to zbędne). –

+0

@Felix: ze względu na absurdalny warunek nie używać implodu – SilentGhost

Odpowiedz

13

To powinno działać. Lepiej chyba raz zadzwonić pod numer count() niż na każdą iterację pętli.

$count = count($director); 
for ($i = 0; $i < $count; $i++) { 
    echo '<a href="person.php?id='.$director[$i]["id"].'">'.$director[$i]["name"].'</a>'; 

    if ($i < ($count - 1)) { 
     echo ', '; 
    } 
} 
+2

Wszyscy robią to zawsze, sprawdzając '$ i <($ count - 1);'; Czy jestem jedyną osobą, która przesuwa test powyżej głównego echa i sprawdza '$ i! = 0'? –

+0

@Michael Mrozek: czy to nie dałoby ci wciąż przecinka? –

+3

Nie, dodajesz wiodące przecinki zamiast końcowych, ale pomijasz pierwsze, więc nie dostajesz ", rzeczy, rzeczy". 'for (...) {if ($ i! = 0) {echo", ";} echo" stuff ";}' –

0
$number = count($director); 
for ($i = 0; $i < $number; $i++) { 
    echo '<a href="person.php?id='.$director[$i]["id"].'">'.$director[$i]["name"].'</a>'; 
    if($i < $number - 1){ 
     echo ', '; 
    } 
} 

Ups, nie widział odpowiedź Tom Haigh, doszliśmy z praktycznie takie same.

0

Co powiesz na coś takiego? Możesz chcieć zapisać wynik "count ($ director)" w zmiennej poza pętlą, dzięki czemu nie będziesz musiał marnować zasobów, przeliczając ją za każdym razem, gdy pętla zostanie uruchomiona.

for($i=0; $i<count($director);$i++){ 
    echo '<a href="person.php?id='.$director[$i]["id"].'">'.$director[$i]["name"].'</a>'; 
    if($i!=count($director)-1){echo ',';} 
} 
2

Moja preferowana metoda:

$links = []; 
for ($i = 0; $i < count($director); $i++) { 
    $links[] = '<a href="person.php?id='.$director[$i]["id"].'">' . 
     $director[$i]["name"] . '</a>'; 
} 
echo implode(', ', $links); 

Albo

$output = ""; 
for ($i = 0; $i < count($director); $i++) { 
    if ($output) { 
    $output .= ", "; 
    } 
    $output .= '<a href="person.php?id='.$director[$i]["id"].'">' . 
     $director[$i]["name"].'</a>'; 
} 
echo $output; 
+0

Zwykle używam tego też! :-) Miły. – acm

4

Jeśli dobrze pamiętam składni PHP poprawnie, to może również pomóc:

$str = ""; 
for ($i = 0; $i < count($director); $i++) { 
    $str .= '<a href="person.php?id='.$director[$i]["id"].'">'.$director[$i]["name"].'</a>, '; 
} 
$str = trim($str, ", "); 
+0

Możesz nawet 'rtrim()' zamiast 'trim()', więc na pewno tylko złapać przecinki końcowe. – pinkgothic

0

No foreach zawiera for :-)

foreach ($director as $key => $person) { 
    if ($key !== 0) echo ', '; 
    echo '<a href="person.php?id='.urlencode($person['id']).'">'.$person['name'].'</a>'; 
} 
3

Lepszym rozwiązaniem jest unikanie pętli. Zignorowałem budowanie linków ze względu na jasność. Zauważ, że nie wierzę, że niezdolność do używania implodu jest warunkiem. Wierzę, że jest to proste stwierdzenie: "Nie widzę sposobu, aby to zrobić za pomocą implode, więc zrobiłem to w ten sposób."

$last_entry = array_pop($director); 
if(count($director) > 0) { 
    echo implode(", ", $director) . " and " . $last_entry; 
} else { 
    echo $last_entry; 
} 
1
for ($i=0 ; $i < count($arr)-1 ; $i++) 
{ 
    echo ($arr[$i].","); 
} 
echo ($arr[count($arr)-1]); 
0
// RENAMED $director to $directors 

$links = ''; 
foreach ($directors AS $director) { 
    $links .= "<a href=\"person.php?id={director['id']}\">{$director['name']}</a>"; 
    if (true !== empty($links)) { 
     $links .= ', '; 
    } 
} 

echo $links; 
0
foreach ($strings as $string){ 
    $superstring .= $string . ', '; 
} 
$echostring = substr_replace($superstring ,"",-2); 
echo $echostring; 
0

Oto moje 2 linie rozwiązanie

// Create your Array 
$cities = Array("Rome", "Florence", "Venice"); 

// implode them 
$list = trim(implode (", ", $cities)) ; 
// remove last comma 
$list = substr ($list,0 ,strlen($list)); 

//check result 
die ($list); 
Powiązane problemy