Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Строка из значений массива


Автор: diez 8.8.2007, 13:24
Задача получить строку из значений глобального массива, например $_POSt.
Причем перед формированием строки выполнить проверку на существование значения,
и если значение пустое в строку не влючать. Все составляющие строки разделяются запятой.

Заранее всем огромное человеческое спасибо за любую помощь!!!

Автор: Mal Hack 8.8.2007, 13:53
http://php.net/implode, а затем регуляркой грохнуть все проблемы между запятыми.

Автор: sTa1kEr 8.8.2007, 17:32
diez, 
Можно сначала отфильтровать массив, а затем объединить.
Код

$array = array("one", "", "two", "three");
$array = array_filter($array, create_function('$a','return !empty($a);'));
echo implode(", ", $array);

Или можно применить функцию http://ru2.php.net/manual/ru/function.array-reduce.php
Код

$array = array("one", "", "two", "three");
$str = array_reduce($array, create_function('$a,$b', 'return $a.(empty($b) || $a === null ? "" : ", ").$b;'));
echo $str;

Автор: Mal Hack 8.8.2007, 19:56
sTa1kEr, более тяжеловесно...

Автор: sTa1kEr 8.8.2007, 20:12
Цитата(Mal Hack @  8.8.2007,  19:56 Найти цитируемый пост)
sTa1kEr, более тяжеловесно... 

Да, но более универсально и исключаются ситуации когда в самом массиве присутствуют запятые.

Кстати, еще один метод отфильтровать пустые элементы - это заполнить еще один массив пустыми значениями и вывести расхождения.
Код

$array = array("one", "", null, "two", "three");
$array = array_diff($array, array_fill(0, count($array), ""));
echo implode(", ", $array);

Автор: Mal Hack 8.8.2007, 22:07
Да, ты прав. 
Я бы сделал array_walk, впихнув туда свою функцию, в которой:
if(empty($item1))
unset $item1;

Автор: BrainWorker 9.8.2007, 23:37
Код

implode(',', array_values($_POST))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)