0

バグのあるPHPページを「継承」しました。私はこの言語の専門家ではありませんが、バグの原因を見つけたと思います。ループ内で、ページはフォーマットされた文字列をサーバーに送信します。HTMLページで見つけた文字列は次のようになります。

2011-09-19__full_1

したがって、3つの部分があるようです。

  • 日付(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日から1文字しか取得していないように見えるため、正しくありません(これにより、Webサイトに奇妙な動作が発生するようです)。

文字列の最後の部分である整数なので、整数を取得するには、この行をこのように安全に変更できますか?

"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 に答える