0

我“继承”了一个有缺陷的 PHP 页面。我不是这种语言的专家,但我想我找到了错误的根源。在一个循环中,页面向服务器发送一个格式化的字符串:我在 HTML 页面中找到的字符串是这样的:

2011-09-19__full_1

所以,我们似乎有三个部分:

  • 日期(0,10);
  • 一个字符串(10,6);
  • 最终数字(17,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);
4

3 回答 3

0

你可以使用

$array =  explode("_", $string);

此函数返回一个数组,其中包含由“_”分隔的字符串中的元素。

我建议这样做是因为双下划线可能会隐藏在该特定情况下为空的另一个值。

于 2011-09-17T16:38:58.087 回答
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。

祝你好运。

于 2011-09-17T16:48:27.080 回答
0

如果只是最后一个整数引起问题,可以使用 strrchr 获取字符串的“尾部”,从最后一个 '_' 开始。

于 2011-09-17T16:51:33.970 回答