0

我有一个字符串“那所房子里有 9 间卧室”,但它可以是其他任何东西,但卧室关键字会保留(床、床、卧室、卧室等)<-这是 $search_array 变量

我已经使用explode将它转换成一个数组

我需要找到一个单词卧室,看看它旁边是否有一个数字。

假设我的数组在爆炸后是 - (9,卧室,在,那个,房子),我如何检查它旁边的数字

我在下面使用了该代码及其在函数内部,因此 $array =& $this->search_array

if($array =& $this->search_array){
$bedroom_keywords = array('bed', 'beds', 'bedroom', 'bedrooms');
foreach($this->bedroom_keywords as $beds)
        {   
            // if successful in assigning key find a 
            // number in next and previous positions
            if($key = array_search($beds, $array))
            {
                if($next = $array[$key+1])
                {
                    echo $next;
                }
                elseif($prev = $array[$key-1])
                {
                    echo $prev;
                }
            }
        }
}

但我收到此错误:

注意:未定义的偏移量:/Users/User/Sites/parser.php 中第 92 行的 2 9ad_type:

当我只使用 2 个令牌时,即 - “9 张床”。

有什么办法可以检查数组中是否有下一个/上一个值或者做一些事情让它起作用?

谢谢

4

4 回答 4

2

我认为您应该检查数组的长度,因为当您在“9 张床”上运行该函数时,key+1 将为 2,并且该数组只有位置 0 和 1。您可以在内部添加一个条件if-else 条件。

于 2012-06-19T08:13:03.590 回答
1

您可以为此任务使用正则表达式:

([0-9]+) +(bed|beds|bedroom|bedrooms)

将找到一个至少包含一位数字的数字,然后是任意数量的空格,然后是其中一个。

于 2012-06-19T08:12:33.710 回答
1

使用正则表达式。例如,要从每个输入中获取床位数:

$inputs = array('1 bed', '22 beds', '1 bedROOM', '99   beDRooms', 'beds');
foreach($inputs as $input) {
    if (preg_match('/(\d+)\s+bed($|s|room|rooms)/i', $input, $matches)) {
        echo "$input => ".$matches[1]."\n";
    }
    else {
        echo "$input => **no match**\n";
    }
}

上面的正则表达式匹配一个或多个数字(我们想要隔离),后跟任意数量的空格,然后是您提到的任何触发词。

看到它在行动

于 2012-06-19T08:16:55.287 回答
0

假设你有数组

$bedroom_keywords = array('bed', 'beds', 'bedroom', 'bedrooms');

你想检查关键词,这也是你可以做的

foreach($bedroom_keywords as $keyword){
    // here you will check it from you actuall array
     if(in_array($keyword ,'yoyr array')){
         echo 'success';
    }
}

希望这会有所帮助

于 2012-06-19T08:14:26.567 回答