PHP行解析为单独的对象

时间:2012-12-21 15:33:16

标签: php wordpress

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

4 个答案:

答案 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 ..名称..即使它只是一个模型

(注意:这段代码不是最漂亮的,但它的基础可以解决。应该清理并改进一下)