Вырежьте часть строки

У меня есть строка, которая мне нужна, чтобы обрезать строку после первого » или пробела. Пример: Demo Road Anytown EC4 5RT, Мне нужно просто взять Demo Road и отрезать остальное.

Я посмотрел на chop, explode, substr, но не могу заставить его работать. Буду признателен, если кто-то сможет помочь с этим запросом. Большое спасибо

0

Решение

Чтобы получить два первых слова, вы можете использовать:

$num = 2; // get two first words
$str = "Demo Road Anytown EC4 5RT";
echo implode(' ', array_slice(explode(' ', $str, $num + 1), 0 , $num)) ; // "Demo Road"

Этот код взрыватьсяs ваша строка в пространстве, поэтому возвращаемый массив имеет два первых слова и остальную часть строки.
Затем с помощью array_slice в массиве хранятся только два первых слова, остальной части строки здесь больше нет. Наконец, строка восстанавливается с использованием взрываться.

Или вы могли бы использовать str_word_count() :

$num = 2;
$str = "Demo Road Anytown EC4 5RT";
echo implode(' ', array_slice(str_word_count($str, 1), 0, $num)) ; // "Demo Road"

Здесь это почти то же самое, но str_word_count используется вместо разрыва строки в слова.

Спасибо @AnthonyB за отличное редактирование !

2

Другие решения

Сделай это:

<?php
//The number of words needed. Here, 2.
$wordNeeded = 2;
$a = 'Demo Road Anytown EC4 5RT';
$b = explode(" ",$a);
//The reconstructed string will be inside.
$reconstructedString = '';
//Loops over $b and check if $wordNeeded is not too high
//and reconstructs the string.
for ($i = 0; $i < $wordNeeded && isset($b[$i]); $i++) {
$reconstructedString .= $b[$i];
//Adds the space, but not after the last word.
if ($i < $wordNeeded -1) {
$reconstructedString .= ' ';
}
}
echo $reconstructedString; // Demo Road

Код разбивает вашу строку в массив слов, используя взрываться и затем переберите массив, чтобы восстановить строку. Если вам тоже нужно третье слово, единственное, что нужно изменить, это $wordNeeded,

1

Очевидно, что вы хотите разбить некорректный адрес на его части.

Используйте разделители

Я называю это уродливым, потому что он не содержит разделителей. Если строка была Demo Road, Anytown, EC4 5RTработа была легкой как

$address = 'Demo Road, Anytown, EC4 5RT';
$parts   = preg_split('~,\s*~', $address);
$street  = $parts[0];
$town    = $parts[1];
$zip     = $parts[2];

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

Используй словарь

Если вы не можете использовать разделители, вам нужен словарь всех действительных названий городов и в идеале всех названий улиц в каждом городе.

Представьте себе эту строку:

24 Upper Demo Road South Anytown EC4 5RT

Это может быть любой из

24 Upper, Demo Road South Anytown, EC4 5RT
24 Upper Demo, Road South Anytown, EC4 5RT
24 Upper Demo Road, South Anytown, EC4 5RT
24 Upper Demo Road South, Anytown, EC4 5RT

По сути, единственное, что вы знаете, это то, что первое нечисловое слово принадлежит названию улицы, а последнее слово, не являющееся почтовым индексом, принадлежит городу.

Теперь, для любого возможного названия города, проверьте словарь, если город существует и имеет соответствующую улицу. Как только вы найдете правильную комбинацию, все готово. Если подходящей комбинации не существует, ваша бизнес-логика должна решить последствия.

Все остальное — просто догадки и чаще всего не получится.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector