PHP-манипуляции со строками (очистите "_" и отметку времени) - PullRequest
1 голос
/ 13 марта 2010

Я не могу найти способ, как убрать бесполезный раздел моей строки (чтение из SQL) Я пробовал strreplace и усекать, но это было не очень хорошо.

У меня есть строковая переменная с именем $ stuff

если $ stuff = 145_timestamp я хочу очистить _ и символы после него. поэтому я хочу, чтобы $ вещи были только 145 . Спасибо.

Ответы [ 5 ]

4 голосов
/ 13 марта 2010

Я провел несколько тестов по различным методам, предложенным здесь, добавив несколько собственных предложений - это время для 100000 итераций каждого метода

int cast     :  79.45ms
intval       : 394.39ms
strtok       : 428.85ms
preg_replace : 604.68ms
substr       : 719.92ms
explode      : 821.99ms

Метод int cast побеждает на милю, но, как уже было отмечено, вы удаляете лидирующие нули. Intval - более медленный метод достижения того же результата.

Быстрый способ получить строку с в начале нуля - использовать strtok ($ str, '_');

$str="154_timestamp";
$c=100000;

$s=microtime(true);
for ($x=0; $x<$c; $x++)
    $n=(int)$str;
printf("int cast : %0.2fms\n", (microtime(true)-$s)*1000);

$s=microtime(true);
for ($x=0; $x<$c; $x++)
    $n = current(explode("_", $str));
printf("explode : %0.2fms\n", (microtime(true)-$s)*1000);

$s=microtime(true);
for ($x=0; $x<$c; $x++)
    $n = substr($str, 0, strpos($str, '_'));
printf("substr : %0.2fms\n", (microtime(true)-$s)*1000);

$s=microtime(true);
for ($x=0; $x<$c; $x++)
    $n = strtok($str, '_');
printf("strtok : %0.2fms\n", (microtime(true)-$s)*1000);

$s=microtime(true);
for ($x=0; $x<$c; $x++)
    $n = intval($str);
printf("intval : %0.2fms\n", (microtime(true)-$s)*1000);

$s=microtime(true);
for ($x=0; $x<$c; $x++)
     $n = preg_replace("/_[^_]+$/",'',$str);
printf("preg_replace : %0.2fms\n", (microtime(true)-$s)*1000);
3 голосов
/ 13 марта 2010
$stuff = "145_timestamp";
$stuff=(int)$stuff;
print $stuff;
3 голосов
/ 13 марта 2010

try explode , который разделит строку на массив на основе разделителя. Если вы используете _ в качестве разделителя, то вы можете выбрать первое значение из массива, используя current :

$number = current(explode("_", $stuff));
1 голос
/ 13 марта 2010
$string = preg_replace("/_[^_]+$/",'',$string);
0 голосов
/ 13 марта 2010

intval извлекает целочисленное значение строк. Или вы можете использовать регулярное выражение или взорвать:

$int = preg_replace('/^(\d+)/', '$1', $string);
$int = explode('_',  $string)[0];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...