it-swarm.com.ru

Как создать список разделенных запятыми из массива в PHP?

Я знаю, как перебирать элементы массива с помощью foreach и добавлять запятую, но всегда сложно снять последнюю запятую. Есть ли простой PHP способ сделать это?

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

В конечном итоге я хочу 

$result = "Apple, banana, pear, grape"
97
st4ck0v3rfl0w

Вы хотите использовать implode для этого.

то есть: $commaList = implode(', ', $fruit);


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

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

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

205
ryeguy

Вот как я это делал:

$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);
35
Nate

Для разработчика, который хочет получить результат с 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
4
Waqar Alamgir

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

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

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

Аналогичен ответу Ллойда, но работает с массивом любого размера.

$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."
        }
2
ceasetodream

Иногда вам даже не нужен php для этого в некоторых случаях (например, каждый элемент списка имеет свой собственный общий тег при рендеринге). Вы всегда можете добавить запятые ко всем элементам, кроме last-child, через css, если они являются отдельными элементами после рендеринга. из сценария. 

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

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

По сути, смотрит на элемент, нацеливается на все, кроме его последнего элемента, и после каждого элемента добавляет запятую. Просто альтернативный способ вообще не использовать скрипт, если это применимо.

1
Lux.Capacitor
$fruit = array('Apple', 'banana', 'pear', 'grape');    
$commasaprated = implode(',' , $fruit);
0
Vijay Prajapati

Функциональное решение будет выглядеть так:

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

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