从字符串中获取特定值,将其分配给变量

时间:2010-07-21 11:45:52

标签: php

shopp('product','quantity','input=menu&return=true');

CMS上的上述功能会返回值<select name="products[1][quantity]" id="quantity-1"><option selected="selected" value="1">1</option><option value="2">2</option><option value="3">3</option></select>

知道如何在最后一个选项标签中获取数字并将其分配给php中的变量吗?在上述情况下,我想将数字“3”分配给变量,比方说,$ aaa。

(BTW,选项标签的数量不固定,最多可以达到几百个。)

3 个答案:

答案 0 :(得分:1)

使用HTML parser

答案 1 :(得分:1)

php中有一个名为 strip_tags 的函数可以帮助你从字符串中删除所有html标签..试试吧!

以下是如何使用它来获取最后一个选项的示例:

$tmp = '<select name="products[1][quantity]" id="quantity-1"><option selected="selected" value="1">1</option><option value="2">2</option><option value="3">3</option></select>';
$tmp=strip_tags(str_replace('">','>***',$tmp));
$aaa = explode('***',$tmp);
echo $aaa[count($aaa)-1];

答案 2 :(得分:1)

<强>更新

哦,男孩,有时甚至比想象的还要容易。已有一个函数可以计算子字符串:substr_count()

所以现在只是:

$number = substr_count($str, '</option>');

因此,如果你说它可能是几百个选项标签,这个解决方案要好得多,因为它不会生成中间数组。


旧答案:(以更复杂的方式做同样的事情)

这是另一种愚蠢的方式:

HTML字符串表示一个选择框,可让您选择数量。因此,我们可以假设option代码的数量代表可供选择的最大数量(在您的示例3中)。

所以我们只需计算选项标签的数量。我们可以使用str_word_count()array_count_values()的组合来完成此操作。

假设我们有这个HTML字符串(来自你的例子):

$str = '<select name="products[1][quantity]" id="quantity-1"><option selected="selected" value="1">1</option><option value="2">2</option><option value="3">3</option></select>';

我们可以使用str_word_count()。由于有开始和结束option标签,我们正在寻找简洁的结束标签。因此,我们必须告诉函数将/也视为单词字符:

str_word_count($str, 1, '/');

给出:

Array
(
    [0] => select
    [1] => name
    [2] => products
    [3] => quantity
    [4] => id
    [5] => quantity-
    [6] => option
    [7] => selected
    [8] => selected
    [9] => value
    [10] => /option
    [11] => option
    [12] => value
    [13] => /option
    [14] => option
    [15] => value
    [16] => /option
    [17] => /select
)

我们可以看到/option发生了3次。

现在我们使用array_count_values()来计算它们:

array_count_values(str_word_count($str, 1, '/'));

给出:

Array
(
    [select] => 1
    [name] => 1
    [products] => 1
    [quantity] => 1
    [id] => 1
    [quantity-] => 1
    [option] => 3
    [selected] => 2
    [value] => 3
    [/option] => 3
    [/select] => 1
)

因此,我们只需应用以下内容即可获得option代码的数量,因此可获得最高数字:

$counter = array_count_values(str_word_count($str, 1, '/'));
$number = $counter['/option'];

当然使用HTML解析器会更好,但如果您知道该函数将始终以这种方式生成HTML,那么计算选项标签应该可行。