Считаю до трех
С нами с 23.03.05
Сообщения: 12353
Рейтинг: 2918
|
Добавлено: 24/03/16 в 01:04 |
Нужно с помощью PHP вытянуть из строки
http://site.com/category/name
подстроку name.
Вроде и просто совсем но чета я в них не разбираюсь. Спасибо.
|
|
|
|
С нами с 27.03.04
Сообщения: 2494
Рейтинг: 585
|
Добавлено: 24/03/16 в 02:02 |
([^http://(.)*/(.)*/])*$
пробуй
|
|
|
|
С нами с 22.05.04
Сообщения: 268
Рейтинг: 251
|
Добавлено: 24/03/16 в 02:05 |
Код: [развернуть] |
<?php
$x="http://site.com/category/name";
preg_match("~^http://.*/(.*)$~smi",$x,$arr);
print_r($arr[1]);
?>
|
|
|
Нестандартные задачи. Кастом программинг на ПХП. Оптимизация стороннего кода. Недорого, недешево.
|
9
|
|
|
С нами с 09.08.12
Сообщения: 185
Рейтинг: 378
|
Добавлено: 24/03/16 в 07:37 |
нафига регулярка?
array_pop(explode("/", $s))
|
|
|
|
С нами с 20.01.03
Сообщения: 18003
Рейтинг: 9760
|
Добавлено: 24/03/16 в 08:03 |
+1 когда можно обойтись без регулярки - лучше ее не использовать
|
|
|
|
С нами с 22.05.04
Сообщения: 268
Рейтинг: 251
|
Добавлено: 24/03/16 в 10:48 |
есть такое
Код: |
$x="http://site.com/category/name";
print(substr($x,(strrpos($x,"/")+1)));
|
хоть регулярка и простая - разница по таймингу гдето вдвое
|
|
Нестандартные задачи. Кастом программинг на ПХП. Оптимизация стороннего кода. Недорого, недешево.
|
9
|
|
|
С нами с 22.05.04
Сообщения: 268
Рейтинг: 251
|
Добавлено: 24/03/16 в 10:51 |
rickdeckard писал: | нафига регулярка?
array_pop(explode("/", $s)) |
работает медленнее чем регулярка
и гдето в три раза медленнее варианта с substr
|
|
Нестандартные задачи. Кастом программинг на ПХП. Оптимизация стороннего кода. Недорого, недешево.
|
9
|
|
|
Считаю до трех
С нами с 23.03.05
Сообщения: 12353
Рейтинг: 2918
|
Добавлено: 25/03/16 в 02:55 |
Всем большое спасибо за помощь. Таки взял вариант без регулярки, больно он ловкий.
|
|
|
|
С нами с 09.08.12
Сообщения: 185
Рейтинг: 378
|
Добавлено: 29/03/16 в 11:50 |
rx писал: | работает медленнее чем регулярка
и гдето в три раза медленнее варианта с substr |
и чо - может это разовый грабинг или вроде того - зачем преждевременные оптимизации? переписать на использование substr тогда
и вообще поставить php7 будет быстро работать
|
|
|
|
С нами с 22.05.04
Сообщения: 268
Рейтинг: 251
|
Добавлено: 29/03/16 в 14:27 |
rickdeckard писал: | и чо - может это разовый грабинг или вроде того - зачем преждевременные оптимизации? переписать на использование substr тогда
и вообще поставить php7 будет быстро работать |
"преждевременных" оптимизаций при выборе из одинаково трудоемкого не бывает,
относительные скорости от версии не зависят
|
|
Нестандартные задачи. Кастом программинг на ПХП. Оптимизация стороннего кода. Недорого, недешево.
|
1
|
|
|
С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970
|
Добавлено: 29/03/16 в 16:10 |
С некоторой вероятностью после name может быть page. Так что лучше с начала считать.
Код: | explode('/', $x)[4]; |
rickdeckard:
При вызове этой функции с не массивом будет вызвана ошибка уровня E_WARNING.
|
|
|
|
💀💀💀
С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728
|
Добавлено: 30/03/16 в 13:11 |
такой варик не предлагали?
Код: |
$urlComopnents = parse_url($url, PHP_URL_PATH);
$categoryName = basename($urlComopnents, "/");
|
|
|
|
|
С нами с 09.08.12
Сообщения: 185
Рейтинг: 378
|
Добавлено: 01/04/16 в 09:33 |
gimcnuk писал: | При вызове этой функции с не массивом будет вызвана ошибка уровня E_WARNING. |
а зачем вы вызываете ее с не массивом? вызывайте с массивом тогда ошибки не будет.
Последний раз редактировалось: rickdeckard (01/04/16 в 09:37), всего редактировалось 1 раз
|
|
|
|
С нами с 09.08.12
Сообщения: 185
Рейтинг: 378
|
Добавлено: 01/04/16 в 09:36 |
|
|
|
|
💀💀💀
С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728
|
Добавлено: 01/04/16 в 09:55 |
мне кажеца нада стремица к повышенной читабельности кода. Всякие эксплоды и субстринги этому не способствуют
|
|
|
|
С нами с 22.05.04
Сообщения: 268
Рейтинг: 251
|
Добавлено: 01/04/16 в 17:23 |
https://ru.wikipedia.org/wiki/Относительность_(философия)
немножко помогу
7.0.3
70000 Regexp done in 0.030171155929565 sec
70000 Substr done in 0.009404182434082 sec
70000 Arrayp done in 0.044059038162231 sec
70000 Parseu done in 0.065323829650879 sec
7.0.2
70000 Regexp done in 0.034229040145874 sec
70000 Substr done in 0.0086348056793213 sec
70000 Arrayp done in 0.048789024353027 sec
70000 Parseu done in 0.076931953430176 sec
7.0.1
70000 Regexp done in 0.032932996749878 sec
70000 Substr done in 0.0065271854400635 sec
70000 Arrayp done in 0.041872024536133 sec
70000 Parseu done in 0.06842303276062 sec
к слову бенчмарки что по ссылке ммм... не слишком точны ибо методика тестирования ммм... неверна, да и сам код не слишком корректен
оставив сам тестовый код, по методике - из за нестабильности окружения в зависимости от запуска результаты могут отличаться вдвое, а среднего арифметического из 100 запусков - в коде бенчмарков нет (как и в примерах выше)
пруф -
########################################
Start : 04/01/2016 07:44:31 am
Server : @[...]
PHP version : 7.0.3
Platform : Linux
########################################
Math : 0.543 sec.
String Manipulation : 0.695 sec.
Loops : 0.154 sec.
If/Else : 0.227 sec.
########################################
Total: : 1.618 sec.
когда по ссылке -
PHP version Math String Manipulation Loops If / Else Total Time
7.0.3 1.25385 1.21416 0.15628 0.22951 2.85381 sec.
|
|
Нестандартные задачи. Кастом программинг на ПХП. Оптимизация стороннего кода. Недорого, недешево.
|
0
|
|
|
💀💀💀
С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728
|
Добавлено: 01/04/16 в 19:51 |
это называется экономия на спичках
В процессе разработки и поддержки кода ты подавляющее большинство времени читаешь, а не пишешь. Поэтому стоит в первую очередь оптимизировать этот момент, конечно, если это не 1разовая работа написанная на коленке кому-то за бесплатно. Во вторую очередь надо бы посмотреть архитектуру приложения, бд, связи в бд. Настройка окружения и все такое. И если все еще не хватает. То подумать над масштабированием (вертикальным или горизонтальным). А не писать хуйню с субстрингами мотивируя это тем, что оно "быстрее" на N микросекунд
Сие просто точка зрения, никому ниче не навязываю.
|
|
|
|
С нами с 22.05.04
Сообщения: 268
Рейтинг: 251
|
Добавлено: 01/04/16 в 20:32 |
Жизнь — цепь, а мелочи в ней — звенья. Нельзя звену не придавать значенья.
просто специфика разная. принцип паретто-спичек работает в меру способностей/опыта каждого индивидуально на самом деле. то есть там где кто-то видит сложности, не факт что они существуют в реальности для кого-то другого.
мои имхо -
* если в процессе разработки ты читаешь больше чем пишешь, то что-то идет не так.
* код который требует суровой поддержки и требует долгого чтения - изначально написан без QA, учета расширения, требуемых фич в проекте и удобной архитектуры.
* бд и хайлоад слабо совместимы. да и связи в бд как боттлнек - хм... при хайлоаде на бд таблицы денормализованы. обычно. ну это если не хочется возиться с масштабированием на N серверов и тратами на кластер.
разумеется сейчас почти все задачи можно решить путем грубого расширения или накидывания серверных мощностей. но - не все. и - не всегда это рентабельно, таки.
|
|
Нестандартные задачи. Кастом программинг на ПХП. Оптимизация стороннего кода. Недорого, недешево.
|
0
|
|
|
💀💀💀
С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728
|
Добавлено: 01/04/16 в 21:56 |
ну сколько ты добьешься своей субстринговой оптимизацией в приросте производительности обычного парсера, или даже движка для сайта\фреймворка? тысячные доли секунды?
rx писал: | * если в процессе разработки ты читаешь больше чем пишешь, то что-то идет не так. |
Ну тут я аплодирую стоя. Писать без ошибок, чтоб не дебажить потом перечитывая свое творение несколько раз подряд это талант. Я к сожалению им не наделен. Да и запоминать спустя месяцы что написано в куске кода тоже не могу, увы. Снова приходится перечитывать.
|
|
|
|
С нами с 22.05.04
Сообщения: 268
Рейтинг: 251
|
Добавлено: 01/04/16 в 22:48 |
ну оптимизация же не только на сабстринг. она везде. и в вычислениях/операциях, и в архитектуре, и складываясь на выходе - получается много. очень много. особенно в движке для сайта/фреймворке. как в используемой памяти, так и скорости исполнения.
что касается парсеров - не всегда сабстринг актуален, +1, но чем сложнее регэкспы/правила разбора и больше размер данных - тем больше разница во времени между простыми ф-циями и регулярками. да и регулярка регулярке рознь. НО - разумеется есть такое что в парсерах, особенно простых - скорость упирается скорее в ширину канала чем в CPU, причем сильно. А вот если канал широкий или многопоточное все и собирается с N точек, то вжевывать данные уже надо оптимально быстро и с минимальными затратами, не плодя сервера.
тут не столько талант (хотя медали/олимпиады/дипломы/етц имеются) сколько опыт - при повторении/наблюдении одного и того же N раз при одинаковом процессе мышления код рано или поздно универсализируется и читается легко, особенно при высоком уровне реюзинга. набивается с шишками
|
|
Нестандартные задачи. Кастом программинг на ПХП. Оптимизация стороннего кода. Недорого, недешево.
|
0
|
|
|
💀💀💀
С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728
|
Добавлено: 01/04/16 в 23:02 |
походу мне еще долго постигать дзен в программерстве
|
|
|
|
С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970
|
Добавлено: 02/04/16 в 01:23 |
rickdeckard писал: | а зачем вы вызываете ее с не массивом? вызывайте с массивом тогда ошибки не будет. |
Просто в твоём примере вызывается функция и пхп выдаёт предупреждение. И тормозит.
Можешь сам сравнить:
Код: [развернуть] |
error_reporting(0);
$start = microtime(true);
$x = 'http://site.com/category/name';
for($i=0; $i<10000000; $i++)
{
//preg_match("~^http://.*/(.*)$~smi", $x, $arr);$result = $arr[1]; //3.353
//$arr = explode("/", $x);$result = $arr[4]; //2.480
//$result = explode('/', $x)[4]; //2.474
//$result = array_pop(explode("/", $x)); //7.071
//$arr = explode("/", $x);$result = array_pop($arr); //2.977
//$result = substr($x,(strrpos($x, "/")+1)); //1.200
//$result = basename(parse_url($x, PHP_URL_PATH), '/'); //24.405
}
echo number_format(microtime(true)-$start, 3)';
|
|
|
|
|
💀💀💀
С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728
|
Добавлено: 02/04/16 в 07:50 |
тоже самое. пхп 5.4 без опкеша. Прогнал каждую 10+ раз:
Код: |
<?php
error_reporting(0);
$start = microtime(true);
$x = 'http://site.com/category/name';
for($i=0; $i<1000000; $i++)
{
//preg_match("~^http://.*/(.*)$~smi", $x, $arr);$result = $arr[1]; // 1.324
//$arr = explode("/", $x);$result = $arr[4]; // 0.872
//$result = explode('/', $x)[4]; //0.782
//$result = array_pop(explode("/", $x)); // 1.764
//$arr = explode("/", $x);$result = array_pop($arr); // 1.065
//$result = substr($x,(strrpos($x, "/")+1)); // 0.467
//$result = basename(parse_url($x, PHP_URL_PATH), '/'); // 1.253 - из 10 раз ниразу до 1.3
//$path = parse_url($x, PHP_URL_PATH); $result = basename($path, '/'); // 1.312 - из 10 раз ниразу меньше 1.3
}
echo number_format(microtime(true)-$start, 3);
|
(нолик с цикла убрал, чета у вас сервера мощные черезчур )
|
|
|
|