0

我的 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

将其分解为不同对象的最简单方法是什么?

例如,我想将价格、街道名称和城市状态 zip 放在不同的对象中。问题是一些地址有单位编号,这使事情变得复杂。以下是我希望它如何工作的示例:

<?php echo $entry->price ?>
<?php echo $entry->street ?>
<?php echo $entry->citystatezip ?>

220,000 美元
504 Freemason St, Unit 2B
Norfolk VA, 23510

或者

274,900 美元
1268 Bells Road
Virginia Beach VA, 23454

4

4 回答 4

2

你需要的是一个正则表达式,检查http://php.net/manual/en/function.preg-match.php

于 2012-12-21T15:37:04.893 回答
2

这是一个非常粗略的正则表达式,似乎能够解析您的字符串。我不是最好的正则表达式,但它似乎有效。

/^(\$(?:\d{1,3},?)*) :: (\d* [\w\s,\d]*), ([\w\s]* \w{2}, \d{5})$/

preg_match;一起使用 第 1 组是价格,第 2 组是地址,第 3 组是城市/州/邮编。

例子:

<?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];
}
于 2012-12-21T15:47:11.077 回答
0

使用 fearray explode ( string $delimiter , string $string [, int $limit ] )如果您使用正确的分隔符,它将为您提供带有字符串的数组

于 2012-12-21T15:36:36.703 回答
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.. 名称.. 即使它只是一个模型

(注意:这段代码不是最漂亮的,但它为工作提供了基础。应该清理和改进一下)

于 2012-12-21T15:38:28.763 回答