PHP: получить числовое значение в конце заданной форматированной строки - PullRequest
0 голосов
/ 17 сентября 2011

Я "унаследовал" страницу с ошибками 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);

Ответы [ 3 ]

0 голосов
/ 17 сентября 2011

Если вы измените код так, как вы предлагаете, вы получите цифры в конце, начиная с позиции 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 в конце.

Удачи.

0 голосов
/ 17 сентября 2011

Если это последнее целое число, вызывающее проблемы, вы можете использовать strrchr, чтобы получить «хвост» строки, начиная с последнего «_».

0 голосов
/ 17 сентября 2011

вы можете использовать

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

эта функция возвращает массив с элементами в строке, разделенными "_".

Я предлагаю это, потому что двойное подчеркивание может скрывать другое значение, которое является пустым в данном конкретном случае.

...