Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Обрезать последние символы
 
 автор: serjinio   (17.09.2008 в 03:03)   письмо автору
 
 

Подскажите как можно например в 1234567890 обрезать последние два разряда чтобы получить 12345678
заранее спасибо за помощь

  Ответить  
 
 автор: Drago   (17.09.2008 в 05:34)   письмо автору
 
   для: serjinio   (17.09.2008 в 03:03)
 

можно сделать так:

<?
$num 
1234567890;
$r 2//количество обрезаемых разрядов
$num floor($num pow(10$r));

echo 
$num;
?>

  Ответить  
 
 автор: Mehelson   (17.09.2008 в 06:07)   письмо автору
 
   для: serjinio   (17.09.2008 в 03:03)
 

А если
<?
$num 
1234567890;
$num substr($num0, -2);
?>

рhр сам установливает тип, в зависимости от контекста, в котором используется переменная...

  Ответить  
 
 автор: Drago   (17.09.2008 в 06:28)   письмо автору
 
   для: Mehelson   (17.09.2008 в 06:07)
 

>рhр сам установливает тип, в зависимости от контекста, в котором используется переменная...

Да, но операции с числами, гораздо быстрее чем со строками.

  Ответить  
 
 автор: serjinio   (17.09.2008 в 09:15)   письмо автору
 
   для: Drago   (17.09.2008 в 06:28)
 

всем огромное спасибо за помощь.

  Ответить  
 
 автор: sim5   (17.09.2008 в 09:18)   письмо автору
 
   для: Drago   (17.09.2008 в 06:28)
 

В данном случае, мне кажется, выгоды нет.

  Ответить  
 
 автор: Mehelson   (17.09.2008 в 10:37)   письмо автору
 
   для: sim5   (17.09.2008 в 09:18)
 

стало интересно...насколько ?
<?
substr
($int0, -2);
?>
12345678
за 0.000088 секунд
<?
floor
($num/pow(10$r));
?>
12345678
за 0.000039 секунд

даже моргнуть не успел :)
и даже при 1000 итераций до секунды не дотягивает

  Ответить  
 
 автор: sim5   (17.09.2008 в 10:50)   письмо автору
 
   для: Mehelson   (17.09.2008 в 10:37)
 

Интересно. :) По идее в первом случае нужно просто взять определенное число байт из памяти. Может быть время уходит на подсчет байтов занятых этой строкой. Плохо, значит указывая строку как переменную, интерпретатор резервирует память не имея указателя на конец данных. Иначе достаточно было указать смещение и все. Ну а то, что математ. сопроцессоры сейчас на очень высоком уровне, это понятно.)

  Ответить  
 
 автор: Trianon   (17.09.2008 в 12:56)   письмо автору
 
   для: sim5   (17.09.2008 в 10:50)
 

В первом случае сперва придется двоичное число с плавающей точкой преобразовать в текстовое десятичное представление. Это довольно тяжелая операция.

  Ответить  
 
 автор: sim5   (17.09.2008 в 13:18)   письмо автору
 
   для: Trianon   (17.09.2008 в 12:56)
 

Видимо так. В РНР ведь не обязательно указывать тип, пусть сам "карячится", вот он и карячится :)

  Ответить  
 
 автор: xx77   (17.09.2008 в 13:23)   письмо автору
 
   для: Trianon   (17.09.2008 в 12:56)
 

_

  Ответить  
 
 автор: xx77   (17.09.2008 в 13:25)   письмо автору
 
   для: Trianon   (17.09.2008 в 12:56)
 

у меня такой замер времени показал ощутимую разницу только в случае когда
$int = 12345678
, если объявить так:
$int = '12345678';
, получается не слишком разное время

  Ответить  
 
 автор: Trianon   (17.09.2008 в 13:29)   письмо автору
 
   для: xx77   (17.09.2008 в 13:25)
 

корректнее сравнивать с floor($num/100)
тогда как?
Кстати, как выгялдит скрипт замера?

  Ответить  
 
 автор: xx77   (17.09.2008 в 13:38)   письмо автору
 
   для: Trianon   (17.09.2008 в 13:29)
 

> как выгялдит

выглядит не очень осмысленно,
приходится вручную перетаскивать строку для сравнения )
<?
list($m$time) = sscanf(microtime(), '0%s %s');
$time .= $m;

<
pre><?
$int '23458765';
for (
$i=0$i 10000$i++) floor($int/100);

// 
//substr($int, 0, -2); 

list($m$t) = sscanf(microtime(), '0%s %s');
printf("<hr/>%.f7\n",  (($t .= $m) - $time)); # время выполнения
?>

  Ответить  
 
 автор: Trianon   (17.09.2008 в 13:49)   письмо автору
 
   для: xx77   (17.09.2008 в 13:38)
 

неправомерное сравнение.
либо floatval(substr($int, 0, -2));
либо strval(floor($int/100));

Кроме того в теле цикла стоило бы нарисовать штук двадцать таких строк(одинаковых) , чтобы убрать влияние самого пересчета.

  Ответить  
 
 автор: Trianon   (17.09.2008 в 13:31)   письмо автору
 
   для: xx77   (17.09.2008 в 13:25)
 

Ну у автора всё ж число на входе, а не строка... Хотя кто его знает...

  Ответить  
 
 автор: serjinio   (17.09.2008 в 15:04)   письмо автору
 
   для: Trianon   (17.09.2008 в 13:31)
 

В частности интересует

$s_f=session_id().mktime();

07ce5e4817c983f3a2637fbb76f25fb7122 1645774

  Ответить  
 
 автор: Trianon   (17.09.2008 в 15:23)   письмо автору
 
   для: serjinio   (17.09.2008 в 15:04)
 

Здесь нет разрядов.
Здесь лишь символы.

  Ответить  
 
 автор: Mehelson   (17.09.2008 в 13:44)   письмо автору
 
   для: xx77   (17.09.2008 в 13:25)
 

разницы не ощутил... как не представляй, хоть числом хоть строкой.
Все одно substr обрабатывает дольше

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования