Задача
Есть массив, который необходимо конвертировать в хорошо отформатированную строку.
Решение
Используйте функцию join():
// создаем список элементов, разделенных запятыми
$string = join(',', $array);
Или цикл:
$string = '';
foreach ($array as $key => $value) {
$string .= ",$value";
}
$string = substr($string, 1); // удаляем ведущую ","
Обсуждение
Если можно использовать функцию join(), используйте; она работает быстрее, чем любой цикл PHP. Однако функция join() не очень гиб-кая. Во-первых, она помещает разделитель только между переменными, а не вокруг них. Чтобы вставить элементы внутрь HTML-тегов полужирного начертания текста и разделить их запятыми, сделайте следующее:
$left = '';
$right = '';
$html = $left . join("$right,$left", $html) . $right;
Во-вторых, функция join() не позволяет различать значения между собой. Если необходимо вставить подмножество значений, нужно использовать собственно цикл:
$string = '';
foreach ($fields as $key => $value) {
// не включаем пароль
if ('password' != $key) {
$string .= ",$value";
}
}
$string = substr($string, 1); // удаляем ведущую ","
Обратите внимание, что разделитель всегда добавляется к каждому значению, а затем удаляется вне цикла. И хотя до некоторой степени расточительно сначала добавлять что-нибудь, а потом это же отнимать, но данный прием более привлекательный и эффективный (в большинстве случаев), чем попытка вставить логику внутрь цикла. То есть:
$string = '';
foreach ($fields as $key => $value) {
// не включаем пароль
if ('password' != $value) {
if (!empty($string)) { $string .= ','; }
$string .= "$value";
}
}
Теперь нужно проверять переменную $string каждый раз, когда добавляется значение. Это хуже, чем простой вызов функции substr(). А также вставлять разделитель (в данном случае запятую) в начало, вместо добавления его, потому что быстрее обрезать строку спереди, чем сзади.