2012-06-01 2 views
0

У меня возникли проблемы с уменьшением идентификатора строки. Это тот случай:PHP - уменьшить строку ID

// given $row[0]['orderid'] = "ORD00389" (varchar) 
$nextID = $row[0]['orderid']; 
$prevID = $row[0]['orderid']; 
$nextID++; // echo 'ORD00390' 
$prevID--; // echo 'ORD00388' 

То, что я узнал до сих пор это прекрасный пункт:

PHP следующим соглашение Perl, когда дело с арифметическими операциями на символьных переменных и не C-х. Например, в PHP и Perl $ a = 'Z'; $ А ++; превращает $ a в 'AA', а в C a = 'Z'; A ++; превращает a в '[' (Значение ASCII 'Z' равно 90, значение ASCII '[' равно 91). Обратите внимание, что переменные символов могут увеличиваться, но не уменьшаться, и даже поэтому поддерживаются только простые символы ASCII (a-z и A-Z). Приращение/уменьшение других символьных переменных не влияет, исходная строка не изменяется.

Есть ли эффективный способ (встроенная функция), чтобы уменьшить эту строку в PHP?

+0

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

+0

Спасибо за ответ, я думаю, что Гален получил его;) –

ответ

8

Если он заканчивается на ORD каждый раз, когда вы можете избавиться от ORD, вычтите 1, а затем верните его вместе.

$id_num = intval(str_replace('ORD', '', $str)); 
$nextID = 'ORD' . ($id_num+1); 
$prevID = 'ORD' . ($id_num-1); 

Если она не начинается с ORD каждый раз, когда вы могли бы заменить все не цифры

$id_num = intval(preg_replace('~\D~', '', $str)); 
+2

Или '$ id_num = intval (substr ($ prevID, 3));' – bfavaretto

+0

Хотя я ожидал встроенной функции в PHP, но это достаточно велико;) –

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