我有一个字符串,我需要在第一个'或空格后剪切字符串。示例:Demo Road Anytown EC4 5RT
。我需要有Demo Road并切断剩下的部分。
我看过chop,explode,substr但似乎无法让它工作。如果有人能帮助我,我将不胜感激。非常感谢
答案 0 :(得分:2)
要获得前两个单词,您可以使用:
$num = 2; // get two first words
$str = "Demo Road Anytown EC4 5RT";
echo implode(' ', array_slice(explode(' ', $str, $num + 1), 0 , $num)) ; // "Demo Road"
代码explode是空格上的字符串,因此返回的数组有两个第一个单词和字符串的其余部分。 然后使用array_slice只有两个第一个单词保留在数组中,其余的字符串不再在这里。最后,使用implode重建字符串。
或者您可以使用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代表great edit!
答案 1 :(得分:1)
这样做:
<?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
代码使用explode将您的字符串分解为单词数组,然后循环遍历数组以重构字符串。如果你也需要第三个词,唯一要改变的是$wordNeeded
。
答案 2 :(得分:0)
显然,您希望将格式错误的地址拆分为其各个部分。
我称之为格式错误,因为它不包含分隔符。如果字符串是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
从本质上讲,你唯一知道的是第一个非数字词属于街道名称,而不是拉链的最后一个词属于城镇。
现在,对于任何可能的城镇名称,检查字典,如果城镇存在并且有相应的街道。一旦找到有效的组合,您就完成了。如果不存在合适的组合,您的业务逻辑必须决定后果。
其他一切都只是猜测而且会更频繁地失败。