php标记化

时间:2011-01-28 09:19:34

标签: php sql

我有一串由多个哈希(#)分隔的字符。我需要在php上的哈希之间得到单词。这是我的代码的样子:

$sql = "SELECT attribute_type.at_name,attribute_type.at_id FROM attribute_type 
WHERE attribute_type.prodType_id = $pt_id 
AND attribute_type.at_id NOT IN (SELECT at_id 
                                 FROM attribute_type 
                                 WHERE attribute_type.at_name = 'Product')";

        while($items. strpos("#")>0){
            // add the selected AT in every loop to be excluded
            // .
            // here tokens from $items are stored individually in 
            // $selectedAT (whose value changes in every loop/cycle)
            //
            // add to the current sql statement the values $at_id and $searchparam
            $sql = $sql .  "AND attribute_type.at_id NOT IN 
                           (SELECT at_id FROM attribute_type 
                            WHERE attribute_type.at_name = '$selectedAT')";
        }

        $dbcon = new DatabaseManager();
        $rs = $dbcon->runQuery($sql);

3 个答案:

答案 0 :(得分:5)

explode通过在给定标记

上拆分字符串来创建数组
$words = explode("#", $items);

现在,如果你需要从字符串中提取这些单词并使用它们来比较SQL查询中的某些列...

$sql = "SELECT ... WHERE column IN ('" . implode("', '", $words) . "')";

在数组中包含单词后,您不需要像循环中那样在循环中构建查询。

即使你确实想这样做,你也不想为每个单词创建一个子查询,只要你可以在一个子查询中将单词组合在一起。

答案 1 :(得分:0)

试试strtok。示例粘贴:

$string = "This is\tan example\nstring";

$tok = strtok($string, " \n\t");

while ($tok !== false) {
    echo "Word=$tok<br />";
    $tok = strtok(" \n\t");
}

答案 2 :(得分:0)

请勿按照另一个答案(现已更新)中的建议使用split 。它使用旧的POSIX规则表达式,不推荐使用。

要拆分字符串,请使用不使用正则表达式但使用普通字符串的$words = explode('#', $items);

Docref:http://php.net/explode