比较数组值

时间:2009-11-05 17:34:13

标签: php

我有一个这样的字符串,我需要从中提取地址:

$string="xyz company 7 th floor hotel yyyy 88 main Road mumbai 400000 this is sample  comapny address 9456  and some other";

$word=str_word_count($string,1,'0...9');

现在word的每个字都有word[0]=xyzword[1]=companyword[2]=7等。

我需要比较每个值。如果单词是一个数字,那么我想将它保存在临时变量中,直到我得到另一个数字 例如word[2]是7,所以我需要在temp变量中保存从那时到88的值。因此,temp应包含"7 th floor hotel yyyy 88"

如果temp变量少于25个字符,那么我们比较直到得到另一个数字。所以这里我们需要保持从88到400000并将其附加到临时变量。

临终应该是这样的:"7 th floor hotel yyyy 88 main Road mumbai 400000"

请帮忙吗?

2 个答案:

答案 0 :(得分:1)

我已回答问题here。虽然preg_match没有遵循您的思维过程,但它可以完成您正在寻找的结果。你在这个问题和这个问题之间唯一的变化就是25个字符的限制。在检查终止号码之前,可以通过接受任何类型的25个字符轻松解决这个问题:

preg_match('/[0-9]+.{0,25}[^0-9]*[0-9]+\s/',$string,$matches);
return $matches[0];

无需使用str_word_count。如果您坚持使用它,请在评论中这样说,我们可以尝试使用您的思维过程来提供解决方案。但是,preg_match可能是完成整个任务的最有效方式。

答案 1 :(得分:0)

尝试使用preg_match_all()

if (preg_match_all('!(?<=\b)\d\b+.*\b+\d+(?<=\b)!', $string, $matches)) {
  echo $matches[0][0];
}

这是在测试一系列数字,后跟任意数量的字符,后跟另一个数字序列。表达式是贪婪的,所以中间模式(。*)应尽可能多地抓取,这意味着你将从第一组到最后一组数字抓取。

在那里有一个前瞻和后视,以检查数字是否在字边界上。您可能需要也可能不需要此功能,您可能需要也可能不需要根据具体要求进行调整。

上述内容适用于整个字符串。

如果你必须(或只是喜欢)操作单词:

$start = false;
$last = false;
$i = 0;
foreach ($words as $word) {
  if (is_numeric($word)) {
    if ($start === false) {
      $start = $i;
    }
    $last = $i;
  }
  $i++;
}
$word_range = $words;
array_splice($word_range, $start, $last - $start + 1);
$substring = implode(' ', $word_range);