我“继承了”一个错误的PHP页面。我不是这种语言的专家,但我想我找到了这个bug的起源。在循环内部,页面将格式化的字符串发送到服务器:我在HTML页面中找到的字符串就像这样:
2011-09-19__full_1
所以,似乎我们有三个部分:
处理这种情况的代码如下:
$datagrid[] = array("date"=>substr($post_array_keys[$i], 0, 10),"post_mode"=>substr($post_array_keys[$i], 10, 6),"class_id"=>substr($post_array_keys[$i], 17, 1),"value"=>$_POST[$post_array_keys[$i]]);
会发生什么:最终的数字可以包含多个字符,所以这篇文章:
"class_id"=>substr($post_array_keys[$i], 17, 1)
不正确,因为它似乎从17日开始只检索一个字符(这似乎会导致网站出现奇怪的行为)。
作为字符串最后一部分的整数,要获得整数,我可以通过这种方式安全地改变这一行吗?
"class_id"=>substr($post_array_keys[$i], 17, strlen($post_array_keys[$i])-17);
答案 0 :(得分:0)
你可以使用
$array = explode("_", $string);
此函数返回一个数组,其中的元素位于由“_”分隔的字符串中。
我建议这样做,因为双下划线可能会隐藏另一个在特定情况下为空的值。
答案 1 :(得分:0)
如果您按照建议的方式更改代码,则会从第17位开始获取数字。原始代码仅获得第一个数字。您的代码将获得所有数字。
似乎你做了你的功课
$datagrid[] = array("date"=>substr($post_array_keys[$i], 0, 10),"post_mode"=>substr($post_array_keys[$i], 10, 6),"class_id"=>substr($post_array_keys[$i], 17, 1),"value"=>$_POST[$post_array_keys[$i]]);
确实为您提供了一个非常好的线索,表明您应该在变量中得到什么:
first 10 is the date
then you have 6 chars for post_mode
then you have 1 char for class_id
如果您还确认有时class_id可能超过1个字符,那么您建议的更改将在最后为您提供完整的class_id。
祝你好运。答案 2 :(得分:0)
如果它只是导致问题的最后一个整数,你可以使用strrchr来获取字符串的“尾部”,从最后一个'_'开始。