2011-09-17 4 views
0

Я «унаследовал» страницу с ошибкой PHP. Я не специалист этого языка, но я думаю, что я нашел происхождение ошибки. Внутри цикла, страница отправляет отформатированную строку на сервер: строка я нашел на странице HTML, как это:PHP: получить числовое значение в конце данной отформатированной строки

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); 
+0

Не знаю, что вы хотите услышать, но только автор может дать вам четкий ответ. Или некоторое время, проведенное в анализе кода. @Jon: 'offset = 17' и' length-17' _is_ от 17 до конца.Однако, более очевидно, когда вы (@Lotus) просто опускаете третий параметр (что означает «до конца») – KingCrunch

+0

Пожалуйста, добавьте 'var_dump (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]])); 'на ваше сообщение, чтобы увидеть проблему полностью – Timur

+0

@KingCrunch Ах да, интересно, с какой функцией меня смешивают. Ну что ж. Отредактировано та. Вы можете использовать explode() (хотя двойное подчеркивание может быть болью). Или другой альтернативой было бы регулярное выражение, которое было бы достаточно простым. Просто говорю'. –

ответ

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 символа, ваше предложенное изменение даст вам полный класс_id в конце.

Удачи.

0

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

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

этой функции возвращает массив с элементами в строке, разделённых «_».

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

+0

Это будет работать, если подчеркивание является разделителем. Но на основании предоставленной им информации кажется, что подчеркивания являются частью второго поля (post_mode), а не разделителя. – jdias

0

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

+0

Я не думаю, что он может предположить, что перед последней частью строки всегда будет символ подчеркивания. Кажется, что подчеркивание является частью второго поля (post_mode), а не разделителя. Его решение всегда получало бы строку, начиная с позиции 17. – jdias

Смежные вопросы