Строковые функции PHP не работают должным образом для чисел, приведенных к строке - PullRequest
0 голосов
/ 28 июля 2011

У меня есть следующий код, который ставит пробел в почтовом индексе.

(string)$postcode = $row['postcode'];
$first = substr($postcode, strlen($postcode)-3);
$second = substr($postcode, strlen($first));
$postcode = $first . ' ' . $second;

Код отлично работает для большинства кодов, кроме некоторых.то есть

PN45HA 70448

И я не могу понять, почему?Кто-нибудь может пролить свет на это?

Спасибо

Ответы [ 3 ]

4 голосов
/ 28 июля 2011

Не совсем понимаю вопрос, но если речь идет о пространстве, это сработает:

$postcode = 'PN45HA70448';
$postcode = substr($postcode, 0, -3) . ' ' . substr($postcode, -3);
// PN45HA70 448
0 голосов
/ 28 июля 2011
$code = 'PN45HA 70448'
$first = substr($postcode, strlen($postcode)-3); // 448
$second = substr($postcode, strlen($first)); // PN45HA 70
$postcode = $first . ' ' . $second; // PN45HA 70 448

Проблема в том, что не все ваши почтовые индексы являются простыми 6-символьными. Вы просто добавляете пробел перед последними 3 символами в любой передаваемой вами строке.

Вам может понадобиться использовать регулярное выражение:

$code = preg_replace('/([A-Z][0-9][A-Z])\s*([0-9][A-Z][0-9])/', '\1 \2', $code);

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

0 голосов
/ 28 июля 2011
$first = substr($postcode, 0, -3);
$second = substr($postcode, -3);
$postcode = $first . ' ' . $second;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...