【问题标题】:Split housenumber from Addressfield从地址字段拆分门牌号
【发布时间】:2015-03-04 15:22:01
【问题描述】:

我想将单个地址字段拆分为街道和门牌号字段。

这是一些示例数据:

Examplestreet 1
Examplestreet 1A
Examplestreet 1 B
The Examplest street 2
1st Example street 3A
1st Example street 13 A  

现在,我在想我从右边开始,寻找我遇到的第一个数字,然后继续前进,直到第一个空间被包围并在那里分割。

你会得到这样的东西:

Example:                           1st Example street 13 A
Start from the right:              A
Find the first number:             A 3
Keep going until the first space:  A 31
Split here:                        1st Example Street    |     13A 

我想在 mySQL 中单独使用它,但也可以使用 PHP。

如果您知道更好的方法,我想知道。

我开始查看 SUBSTRING_INDEX,但没有成功。

坦率地说,我不知道从哪里开始。

【问题讨论】:

  • 在您的情况下,一个好的起点是在进入数据库时​​按照您想要的方式存储门牌号码。即使您必须使用 PHP 预先处理拆分,您也可以执行一次,而不是以后每次选择数据。
  • 你的门牌号码总是在字符串的末尾,从数字开始是真的吗?
  • @Crackertastic 这是因为我正在编写一个将旧数据转换为新列的补丁。我最近在数据库中添加了 houseNumber 列,所有新数据都插入到两列中。旧数据必须转换。
  • @user4035:是的,我快速查看了数据,似乎是

标签: php mysql logic


【解决方案1】:

如果门牌号总是在字符串的末尾,从数字开始,我们可以使用正则表达式:

<?php
$names = array(
    'Examplestreet 1',
    'Examplestreet 1A',
    'Examplestreet 1 B',
    'The Examplest street 2',
    '1st Example street 3A',
    '1st Example street 13 A ',
    );

foreach($names as $value)
{
    $matches = array();
    if (preg_match('/.*\s(\d.*)/', $value, $matches))
    {
        print $matches[1]."\n";
    }
}

输出:

1
1A
1 B
2
3A
13 A 

【讨论】:

    猜你喜欢
    • 2018-01-28
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 2019-08-25
    • 1970-01-01
    • 2014-12-23
    相关资源
    最近更新 更多