Varianta 1 – repetare condiţională
Aproape toate variantele prezentate sunt simple şi sigure, după cum se va vedea în rezultatul afişat. Doar că, din teste, această variantă a lucrat bine şi în cazul folosirii imbricate a lui WHILE, după cum este redat în imaginea articolului, unde folosirea acestei enumerări (autorii de articol) este, abia, la al treilea WHILE. După cum se vede în scriptul de mai jos, am folosit variabila $i (incrementată) pentru a identifica numărul rândului curent.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php $result = mysqli_query($con,$sql) or die(mysqli_error($con)); $nr_rd = mysqli_num_rows($result); $i=1; WHILE($row=mysqli_fetch_array($result)) { ECHO $row['name']; IF ($i < $nr_rd) { ECHO ', '; } $i++; } ?> |
Rezultat: Ronald Mendel, Victoria Ashworth, Martin Blank, John Doe
Varianta 2 – implode
Folosirea funcţiei implode(), având în primul argument delimitatorul (virgulă, punct şi virgulă etc.) oferă posibilitatea unei astfel de enumerări. Totuşi, din testul făcut, nu prea funcţionează în cazul lui WHILE imbricat, apărând delimitatorul şi după ultimul element ar rezultatului.
1 2 3 4 5 6 7 8 9 |
<?php $result = mysqli_query($con, $sql); $name = array(); WHILE($row = mysqli_fetch_array($result)) { $name[] = $row['name']; } ECHO implode(', ', $name); ?> |
Varianta 3 – substr()
Şi această variantă ar fi comodă. După cum se vede mai jos, se adaugă virgula după fiecare element al rezultatului, iar funcţia substr() trebuie să elimine ultima virgulă din rezultat; deoarece după virgulă am inserat şi spaţiu, va fi necesar ca ultimul argument al funcţiei să fie -2, eliminând astfel ultimele două caractere (virgulă şi spaţiu).
1 2 3 4 5 6 7 8 9 |
<?php $rez = mysqli_query($con, $sql); $rd= ''; WHILE ($row = mysqli_fetch_array($rez)) { $rd.= $row['name'].', '; } ECHO substr($rd,0,-2); ?> |
Rezultat: Ronald Mendel, Victoria Ashworth, Martin Blank, John Doe
Varianta 4 – GROUP_CONCAT()
Funcţia GROUP_CONCAT() este utilizabilă direct în codul MySQL, problema care se vede şi în rezultatul de mai jos, fiind că nu se lasă spaţiu între virgulă şi conţinutul de după.
1 2 3 4 5 6 |
<?php $sql = "SELECT GROUP_CONCAT(name) AS gp_nume FROM employees; "; $result = mysqli_query($con, $sql); $row = mysqli_fetch_array($result); ECHO $row[0]; ?> |
Varianta 5 – realizare funcţie
Această variantă este similară cu prima, doar că am creat o funcţie, în cazul în care este necesar a fi apelată în mai multe locuri.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php function fc_enum() { Global $con; $sql="SELECT * FROM employees"; $result = mysqli_query($con,$sql) or die(mysqli_error($con)); $nr_rd = mysqli_num_rows($result); $i=1; WHILE($row=mysqli_fetch_array($result)) { IF ($i < $nr_rd) { $delim = ', '; } ELSE { $delim = ''; } $enumer="".$row['name'].$delim; $i++; ECHO $enumer; } } fc_enum(); ?> |
- StackOverflow.com (PHP: Separate MySQL query values with a comma)
- StackOverflow.com (How can I echo the position number of SQL row in PHP?)
- StackOverflow.com (php mysql- put mysql_fetch_array() result in to a string and split the string by comma). Interesant de studiat şi lucrul funcţiei explode().
- Idem 3
- Idem 3