我的wordpress小部件中有一行代码从RSS提要输出:
<?php echo $entry->title ?>
并在显示时看起来像:
$ 220,000 :: 504 Freemason St,Unit 2B,Norfolk VA,23510
或
$ 274,900 :: 1268 Bells Road,Virginia Beach VA,23454
将此分解为不同对象的最简单方法是什么?
例如,我希望将价格,街道名称和城市状态压缩到不同的对象中。问题是某些地址有单位数,这使事情变得复杂。以下是我希望如何工作的示例:
<?php echo $entry->price ?>
<?php echo $entry->street ?>
<?php echo $entry->citystatezip ?>
$ 220,000
504 Freemason St,2B单元
Norfolk VA,23510
或
$二十七万四千九
1268 Bells Road
弗吉尼亚海滩VA,23454
答案 0 :(得分:2)
您需要的是正则表达式,请检查http://php.net/manual/en/function.preg-match.php
答案 1 :(得分:2)
这是一个非常粗糙的正则表达式,似乎能够解析你的字符串。我对正则表达式不是最好的,但它似乎有效。
/^(\$(?:\d{1,3},?)*) :: (\d* [\w\s,\d]*), ([\w\s]* \w{2}, \d{5})$/
与preg_match
一起使用;第一组是价格,第二组是地址,第三组是城市/州/邮编。
示例:
<?php
$ptn = '/^(\$(?:\d{1,3},?)*) :: (\d* [\w\s,\d]*), ([\w\s]* \w{2}, \d{5})$/';
if(preg_match($ptn, $entry->title, $match) === 1){
$price = $match[1];
$street = $match[2];
$citystatezip = $match[3];
}
答案 2 :(得分:0)
使用f.e.如果使用正确的分隔符
,array explode ( string $delimiter , string $string [, int $limit ] )
将为您提供包含字符串的数组
答案 3 :(得分:0)
以下代码将根据需要填写您的$ entry对象:
$string = '$274,900 :: 1268 Bells Road, Virginia Beach VA, 23454';
$pricePart = explode('::', $string);
$addressPart = explode(',', $pricePart[1]);
$entry = new stdClass();
$entry->price = trim($pricePart[0]);
if ( count($addressPart) == 3 ) {
$entry->street = trim($addressPart[0]);
$entry->citystatezip = trim($addressPart[1]) . ', ' . trim($addressPart[2]);
} else {
$entry->street = trim($addressPart[0]) . ', ' . trim($addressPart[1]);
$entry->citystatezip = trim($addressPart[2]) . ', ' . trim($addressPart[3]);
}
更新了处理单位的答案
更新:更改了数组名称,我讨厌$ array ..名称..即使它只是一个模型
(注意:这段代码不是最漂亮的,但它的基础可以解决。应该清理并改进一下)