Разработчику. Сборник рецептов PHP
Задавайте вопросы

Преобразование массива в строку

Вернуться назад

Задача

Есть массив, который необходимо конвертировать в хорошо отформатированную строку.

Решение

Используйте функцию join():

// создаем список элементов, разделенных запятыми
$string = join(' , ' , $array);

Или цикл:

$string = ' ';

foreach ($array as $key => $value) {
    $string .= ",$value";
}

$string = substr($string, 1);     // удаляем ведущую " , "

Обсуждение

Если можно использовать функцию join(), используйте; она работает быстрее, чем любой цикл PHP. Однако функция join() не очень гибкая. Во-первых, она помещает разделитель только между переменными, а не вокруг них. Чтобы вставить элементы внутрь HTML-тегов полужирного начертания текста и разделить их запятыми, сделайте следующее:

$left = '<b>';
$right = '</b>';

$html = $left . join("$right,$left", $html) . $right;

Во-вторых, функция join() не позволяет различать значения между собой. Если необходимо вставить подмножество значений, нужно использовать собственно цикл:

$string = ' ';

foreach ($fields as $key => $value) {
    // не включаем пароль
    if ('password' != $key) {
    $string .= ",<b>$value</b>";
    }
}

$string = substr($string, 1); // удаляем ведущую " , "

Обратите внимание, что разделитель всегда добавляется к каждому значению, а затем удаляется вне цикла. И хотя до некоторой степени расточительно сначала добавлять что-нибудь, а потом это же отнимать, но данный прием более привлекательный и эффективный (в большинстве случаев), чем попытка вставить логику внутрь цикла. То есть:

$string = ' ';
foreach ($fields as $key => $value) {
    // не включаем пароль
    if ('password' != $value) {
        if (!empty($string)) { $string .= ' , '; }
        $string .= "<b>$value</b>";
    }
}

Теперь нужно проверять переменную $string каждый раз, когда добавляется значение. Это хуже, чем простой вызов функции substr(). А также вставлять разделитель (в данном случае запятую) в начало, вместо добавления его, потому что быстрее обрезать строку спереди, чем сзади.

Вернуться назад

Рейтинг@Mail.ru

Яндекс.Метрика

Индекс цитирования

Рейтинг Сайтов ДОСКИ.РУ