Функция trim(): как избежать возврата пустой строки, если аргумент не установлен/нулевая переменная?

У меня проблема при использовании функции trim() в php.

//Suppose the input variable is null.
$input = NULL;
echo (trim($input));

Как показано выше, вывод кодов представляет собой пустую строку, если входной аргумент имеет значение NULL. Есть ли способ избежать этого? Кажется, что обрезка по умолчанию вернет пустую строку, если ввод не установлен или имеет значение NULL.

Это затрудняет использование обрезки следующим образом.

array_map('trim', $array);

Мне интересно, могу ли я каким-либо образом добиться того же результата вместо того, чтобы перебирать массив. Я также заметил, что функция обрезки имеет второй параметр, передавая второй параметр, вы можете избежать некоторых charlist. но, похоже, это не работает для меня.

Любые идеи? Спасибо.


person easycoder    schedule 12.02.2011    source источник
comment
Trim ожидает строковый ввод, поэтому PHP пытается быть полезным и преобразует нуль в пустую строку.   -  person Marc B    schedule 12.02.2011
comment
Почему? Что не так с пустой строкой?   -  person Jonah    schedule 12.02.2011
comment
@Jonah Я пытаюсь использовать array_map('trim', $array).. но это отфильтрует переменную NULL.   -  person easycoder    schedule 12.02.2011
comment
@easycoder: вы говорите, что ваша программа должна различать нулевые и пустые строки?   -  person Jonah    schedule 13.02.2011
comment
@easycoder: хорошо, я отредактировал свой ответ, посмотри.   -  person Jonah    schedule 13.02.2011


Ответы (2)


Создайте прокси-функцию, чтобы убедиться, что это строка, прежде чем запускать на ней trim().

function trimIfString($value) {
    return is_string($value) ? trim($value) : $value;
}

И затем, конечно же, вместо этого передайте это array_map().

array_map('trimIfString', $array);
person Jonah    schedule 12.02.2011
comment
спасибо за напоминание... функция прокси мне кажется хорошей.. попробую.. :) - person easycoder; 13.02.2011

Почему бы просто не:

$input = !empty($input) ? trim($input) : $input;
person Mikel    schedule 12.02.2011
comment
Да, только что понял. Спасибо. - person Mikel; 12.02.2011
comment
Я привык использовать isset(), потому что обычно вы хотите рассматривать null и пустую строку как эквивалентную, как вы сказали в своем ответе. ;-) - person Mikel; 12.02.2011
comment
Похоже, после замены isset на is_null у меня все было наоборот. Должно быть исправлено сейчас. Дай мне знать, если это работает. - person Mikel; 23.05.2016