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,选项标签的数量不固定,最多可以达到几百个。)
答案 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,那么计算选项标签应该可行。