|
|
|
| Из данного текста как вытащить число 64, там может быть любое другое число. В общем после второго слэша
/4678965350569212/64/1220435/
|
| |
|
|
|
|
|
|
|
для: Лена Смирнова
(24.08.2009 в 23:28)
| | есть несколько способов
например такие
<?php
$txt = '/4678965350569212/64/1220435/';
preg_match_all('#(?<!^|\G)/(\d+)#', $txt, $o);
print_r($o);
?><hr/><?
preg_match_all('#^/\d+/(\d+)#', $txt, $o);
print_r($o);
?>
| и могут оба не работать в зависимости от того что конкретно проверяется | |
|
|
|
|
|
|
|
для: heed
(24.08.2009 в 23:55)
| | забыл такой способ
print_r(sscanf($txt, '/%*d/%d')); | |
|
|
|
|
|
|
|
для: Лена Смирнова
(24.08.2009 в 23:28)
| |
<?php
$a = explode("/", "/4678965350569212/64/1220435/");
echo $a[2];
?>
|
В стопицоттыщ раз быстрее и нагляднее чем регулярные выражения.
Предвидя возгласы типа "да тут же целый массив создается!" отвечу сразу - во первых все равно в стопицоттыщ раз быстрее, а во вторых эти данные могут пригодится в дальнейшем по коду. | |
|
|
|
|
|
|
|
для: Евгений Петров
(25.08.2009 в 01:06)
| | Спасибо, я так и сделала! | |
|
|
|
|
|
|
|
для: Евгений Петров
(25.08.2009 в 01:06)
| | быстрее чем регулярные сообщения, возможно.
Но расходование большей памяти тоже занимает время.
Если сравнить предидущий способ (со sscanf) с Вашим , при условии что проверяемые значения занимают много места в памяти , и нужна всего одна переменная ,,
Ваш способ проигрывает по времени
<pre><?
$HDTME = 0.0;
function g_t($bool=false){ //время
global $HDTME;
list($m, $s) = sscanf(microtime(), '%f %u');
if($bool) {
printf("<hr/>%.7f\n\n", (($m + $s) - $HDTME));
flush();
} $HDTME = $m + $s;
}
g_t();# засечено
$txt = array('/4678965350569212/64/1220435/',
'/4678965350569212/65/1220435/',
'/4678965350569212/66/1220435/',
'/4678965350569212/67/1220435/');
$txt = array_merge($txt, $txt, $txt, $txt, $txt, $txt, $txt);
$txt = array_merge($txt, $txt, $txt, $txt, $txt, $txt, $txt);
$txt = array_merge($txt, $txt, $txt, $txt, $txt, $txt, $txt);
$txt = array_merge($txt, $txt, $txt, $txt, $txt, $txt, $txt);
$txt = array_merge($txt, $txt, $txt, $txt, $txt, $txt, $txt);
$txt = array_merge($txt, $txt, $txt, $txt, $txt, $txt, $txt);
// print_r($txt); exit;
// здесь прилично времнеи уходит на заполнение памяти массивом
?><hr/><?
g_t(1);# засечено
foreach($txt AS $val) {
list($int) = sscanf($val, '/%*d/%d');
}
g_t(1);# засечено
foreach($txt AS $val) {
list(,,$int) = explode('/', $val);
}
g_t(1);# засечено
foreach($txt AS $val) {
list($int) = sscanf($val, '/%*d/%d');
}
g_t(1);# засечено
foreach($txt AS $val) {
list(,,$int) = explode('/', $val);
}
g_t(1);# засечено
foreach($txt AS $val) {
list($int) = sscanf($val, '/%*d/%d');
}
g_t(1);# засечено
foreach($txt AS $val) {
list(,,$int) = explode('/', $val);
}
g_t(1);# засечено
?>
|
| |
|
|
|
|
|
|
|
для: heed
(25.08.2009 в 20:20)
| | Бррр, ... Не знаю чего вы там напроверяли, но то что explode занимает меньше памяти чем регулярное выражение - это факт. на счет sscanf спорить не буду хотя тоже есть очень большие сомнения.
Но допустим sscanf быстрее. Скажите мне, что лучше - выигрыш в скорости в тысячные доли секунды либо читаемость кода? | |
|
|
|
|
|
|
|
для: Евгений Петров
(25.08.2009 в 23:33)
| | Возможно Вы правы.
Просто наверное я привык сидеть и разбираться в одной строчке закорючек
,) зато реже страницы прокручивать приходится.
Насчёт регулярных выражений, Ваша правда.
В php это просто иногда применяется когда уже ничего больше не помогает вытащить чего-нибудь со строки ,) и уже не до времени выполнения. Или когда их применение оправдано.
В Perl они намного красивее и шустрее | |
|
|
|
|
|
|
|
для: Евгений Петров
(25.08.2009 в 23:33)
| | >Но допустим sscanf быстрее. Скажите мне, что лучше - выигрыш в скорости в тысячные доли секунды либо читаемость кода?
Важнее читаемость кода. И именно поэтому (а не вопреки) имеет смысл выбрать sscanf.
Хотя разница в читаемости и не сильно высока. | |
|
|
|