Як створити список, розділений комами, з масиву в PHP?


113

Я знаю, як перебирати елементи масиву за допомогою foreach і додавати кому, але завжди боліти, що потрібно зняти остаточну кому. Чи є простий спосіб PHP це зробити?

$fruit = array('apple', 'banana', 'pear', 'grape');

Зрештою я хочу

$result = "apple, banana, pear, grape"

Відповіді:


231

Ви хочете використовувати імплоде для цього .

тобто: $commaList = implode(', ', $fruit);


Існує спосіб додавання коми без наявності останнього. Ви хочете зробити це, якщо вам доведеться одночасно робити якісь інші маніпуляції. Наприклад, можливо, ви хочете цитувати кожен фрукт, а потім розділити їх усіма комами:

$prefix = $fruitList = '';
foreach ($fruits as $fruit)
{
    $fruitList .= $prefix . '"' . $fruit . '"';
    $prefix = ', ';
}

Крім того, якщо ви просто зробите це "звичайним" способом додавання коми після кожного елемента (як це звучить, що ви робили раніше), і вам потрібно відрізати останній, просто зробіть це $list = rtrim($list, ', '). Я бачу, що substrв цій ситуації багато людей без потреби обмінюються .


4
Це мало б більше сенсу (якщо намагається додати лапки) для виклику <код> $ fruitlist = ' "' вибухати (." "", $ Плід). " '; </ Код>
cwallenpoole

Цикл foreach краще, якщо ви хочете маніпулювати цими даними в масиві, перш ніж перетворювати їх у рядок; Наприклад, addlashes або mysql_real_escape_string.
Naphtali Gilead

39

Ось як я це робив:

$arr = array(1,2,3,4,5,6,7,8,9);

$string = rtrim(implode(',', $arr), ',');

echo $string;

Вихід:

1,2,3,4,5,6,7,8,9

Демо-версія: http://ideone.com/EWK1XR

EDIT: За коментарем @ joseantgv, ви повинні мати можливість видалити rtrim()з наведеного вище прикладу. Тобто:

$string = implode(',', $arr);

5
Як відповів вище, ви можете просто зробити implode (',', $ arr)
joseantgv

@joseantgv Ти маєш рацію, я не знаю, чому я використовую rtrim(). Я пригадую, що у мене виникли проблеми з додатковими комами на кінці рядка, але я не можу пригадати ситуацію, коли це відбувалося.
Нейт

6

Результат andзрештою:

$titleString = array('apple', 'banana', 'pear', 'grape');
$totalTitles = count($titleString);
if ($totalTitles>1) {
    $titleString = implode(', ', array_slice($titleString, 0, $totalTitles-1)) . ' and ' . end($titleString);
} else {
    $titleString = implode(', ', $titleString);
}

echo $titleString; // apple, banana, pear and grape

3

Схожий на відповідь Ллойда, але працює з будь-яким масивом розмірів.

$missing = array();
$missing[] = 'name';
$missing[] = 'zipcode';
$missing[] = 'phone';

if( is_array($missing) && count($missing) > 0 )
        {
            $result = '';
            $total = count($missing) - 1;
            for($i = 0; $i <= $total; $i++)
            { 
              if($i == $total && $total > 0)
                   $result .= "and ";

              $result .= $missing[$i];

              if($i < $total)
                $result .= ", ";
            }

            echo 'You need to provide your '.$result.'.';
            // Echos "You need to provide your name, zipcode, and phone."
        }

3

Я вважаю за краще використовувати оператор IF у циклі FOR, який перевіряє, щоб переконатися, що поточна ітерація не є останнім значенням масиву. Якщо ні, додайте кому

$fruit = array("apple", "banana", "pear", "grape");

for($i = 0; $i < count($fruit); $i++){
    echo "$fruit[$i]";
    if($i < (count($fruit) -1)){
      echo ", ";
    }
}

2
якщо загальний підрахунок просто інший, ніж 4?
Jyothish

1

Іноді вам навіть не потрібен php для цього в певних випадках (наприклад, елементи списку є власним загальним тегом у візуалізації, наприклад). Ви завжди можете додавати коми до всіх елементів, окрім останнього дочірні, за допомогою css, якщо вони є окремими елементами після надання. зі сценарію.

Я дуже часто використовую це в базових додатках, щоб обрізати деякий довільний код жиру:

.likers a:not(:last-child):after { content: ","; }

В основному дивиться на елемент, націлений на всіх, крім останнього елемента, і після кожного елемента додає кому. Просто альтернативний спосіб взагалі не використовувати скрипт, якщо справа застосовується.



0

Функціональне рішення піде так:

$fruit = array('apple', 'banana', 'pear', 'grape');
$sep = ','; 

array_reduce(
    $fruits,
    function($fruitsStr, $fruit) use ($sep) {
        return (('' == $fruitsStr) ? $fruit : $fruitsStr . $sep . $fruit);
    },
    ''
);

0

Дотримуйтесь цього

$teacher_id = '';

        for ($i = 0; $i < count($data['teacher_id']); $i++) {

            $teacher_id .= $data['teacher_id'][$i].',';

        }
        $teacher_id = rtrim($teacher_id, ',');
        echo $teacher_id; exit;

-1

Якщо ви робите цитовані відповіді, ви можете зробити

$commaList = '"'.implode( '" , " ', $fruit). '"';

вищевикладене передбачає, що фрукти є недійсними. Якщо ви не хочете робити це припущення, ви можете використовувати оператор if-then-else або потрійний (? :).


-2

Ще один спосіб може бути таким:

$letters = array("a", "b", "c", "d", "e", "f", "g");

$result = substr(implode(", ", $letters), 0, -3);

Вихід $result- це добре відформатований список, розділений комами.

a, b, c, d, e, f, g

-2
$letters = array("a", "b", "c", "d", "e", "f", "g"); // this array can n no. of values
$result = substr(implode(", ", $letters), 0);
echo $result

вихід-> a, b, c, d, e, f, g

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.