2010-05-19 27 views
8

tengo este sencillo bucle para el clon de una matriz:PHP: muestra una coma después de cada elemento excepto el último. El uso de 'para' declaración y no 'implosión/explotar'

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

El problema aquí es que cuando más de un elemento se encuentra en la matriz en cuando me siento todo lo resonó sin ningún espacio entre. Quiero separar cada elemento con una coma, excepto la última.

no puedo usar implode por lo que estoy buscando otra solución

+1

respuesta de Tom Haigh debería funcionar. O simplemente elimine el último carácter de la cadena resultante (pero podría no ser una forma tan limpia;)). –

+0

@SilentGhost: ¿Por qué etiqueta esta tarea? Si debido a la declaración * No puedo usar 'implosión' *: El OP accede a una matriz, por lo que necesita el ciclo. 'implode' solo funciona cuando ya tienes una matriz de elementos para" implosionar "(por supuesto, uno podría generar una lista del HTML de antemano y luego implosionar, pero esto me parece innecesario). –

+0

@Felix: debido a la condición ridícula de no usar implosión – SilentGhost

Respuesta

13

Esto debería funcionar. Creo que es mejor llamar al count() una vez en lugar de cada iteración de bucle.

$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

Todo el mundo siempre hace esto al marcar '$ i <($ count - 1);'; ¿Soy la única persona que mueve el cheque por encima del eco principal y comprueba '$ i! = 0'? –

+0

@Michael Mrozek: ¿aún no te daría una coma al final? –

+3

No, está agregando comas iniciales en lugar de seguir, pero omite la primera para no obtener ", cosas, cosas". 'for (...) {if ($ i! = 0) {echo", ";} echo" cosas ";}' –

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 ', '; 
    } 
} 

Vaya, yo no vi la respuesta de Tom Haigh, que llegaron con prácticamente el mismo.

0

¿Qué tal algo así? Es posible que desee almacenar el resultado de "count ($ director)" en una variable fuera del ciclo para que no tenga que perder recursos para volver a calcularlo cada vez que se ejecute el ciclo.

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

Mi método preferido:

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

O

$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

¡Tiendo a usar este también! :-) Agradable. – acm

4

Si recuerdo sintaxis de PHP correctamente, esto también podría ayudar a:

$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

Incluso puede 'rtrim()' en lugar de 'trim()', por lo que definitivamente solo atrapa las comas al final. – pinkgothic

0

Bueno, foreach contiene for :-)

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

Una solución mejor es evitar un bucle completo. He ignorado la construcción de los enlaces por el bien de la claridad. Tenga en cuenta que no creo que la incapacidad de usar implosión sea una condición. Creo que es una simple declaración de: "No veo cómo hacer que esto funcione con implosión, así que lo hice de esta manera".

$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

aquí está mi solución de 2 líneas

// 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); 
Cuestiones relacionadas