Hey millet! Ben düzenli ifadeler / etc ile biraz yardıma ihtiyacım var. Ben, url den uygulamada yönlendirici çeşit sanal tuşları ayıklamak gerekir. İşte params şunlardır:
Rule: /books/:category/:id/:keyname
Data: /books/php/12345/this-is-a-test-keyname
Çıktı böyle bir şey olmalı:
array(
'category' => 'php',
'id' => '12345',
'keyname' => 'this-is-a-test-keyname'
);
Peki, soru şu: ben bu php nasıl yapabilirim?
Kurallar P.S. kombinasyonları değişebilir. ':' Sembolü Yani, ana tuşları ile kelimelerdir. Bu gibi, örneğin:
/book-:id/:category/:keyname
/book/:id_:category~:keyname
P.S. 2: Bu i daha önce vardı bir kod parçasıdır. Bu çalışma, fakat esnek değildir.
function rule_process($rule, $data) {
// extract chunks
$ruleItems = explode('/',$rule);
$dataItems = explode('/',$data);
// remove empty items
array_clean(&$ruleItems);
array_clean(&$dataItems);
// rule and data supposed to have the same structure
if (count($ruleItems) == count($dataItems)) {
$result = array();
foreach($ruleItems as $ruleKey => $ruleValue) {
// check if the chunk is a key
if (preg_match('/^:[\w]{1,}$/',$ruleValue)) {
// ok, found key, adding data to result
$ruleValue = substr($ruleValue,1);
$result[$ruleValue] = $dataItems[$ruleKey];
}
}
if (count($result) > 0) return $result;
unset($result);
}
return false;
}
function array_clean($array) {
foreach($array as $key => $value) {
if (strlen($value) == 0) unset($array[$key]);
}
}
Aslında yönlendirici bu sürüm benim için yeterli olabilir, ancak esnek bir çözüm sadece nasıl ilgi im olabilir. Bu arada, bazı testler: (10000 işlemlerin 30 kez):
TEST #0 => Time:0.689285993576, Failures: 0
TEST #1 => Time:0.684408903122, Failures: 0
TEST #2 => Time:0.683394908905, Failures: 0
TEST #3 => Time:0.68522810936, Failures: 0
TEST #4 => Time:0.681587934494, Failures: 0
TEST #5 => Time:0.681943893433, Failures: 0
TEST #6 => Time:0.683794975281, Failures: 0
TEST #7 => Time:0.683885097504, Failures: 0
TEST #8 => Time:0.684013843536, Failures: 0
TEST #9 => Time:0.684071063995, Failures: 0
TEST #10 => Time:0.685361146927, Failures: 0
TEST #11 => Time:0.68728518486, Failures: 0
TEST #12 => Time:0.688632011414, Failures: 0
TEST #13 => Time:0.688556909561, Failures: 0
TEST #14 => Time:0.688539981842, Failures: 0
TEST #15 => Time:0.689876079559, Failures: 0
TEST #16 => Time:0.689854860306, Failures: 0
TEST #17 => Time:0.68727684021, Failures: 0
TEST #18 => Time:0.686210155487, Failures: 0
TEST #19 => Time:0.687953948975, Failures: 0
TEST #20 => Time:0.687957048416, Failures: 0
TEST #21 => Time:0.686664819717, Failures: 0
TEST #22 => Time:0.686244010925, Failures: 0
TEST #23 => Time:0.686643123627, Failures: 0
TEST #24 => Time:0.685017108917, Failures: 0
TEST #25 => Time:0.686363935471, Failures: 0
TEST #26 => Time:0.687278985977, Failures: 0
TEST #27 => Time:0.688650846481, Failures: 0
TEST #28 => Time:0.688835144043, Failures: 0
TEST #29 => Time:0.68886089325, Failures: 0
Yeterince Yani, onun hızlı. Düzenli bir laptop im test. Yani, emin - bu bir gerçek web sitesinde kullanılabilir.
Başka bir çözüm?