2016-04-10 21 views
0

Ich habe eine Zeichenfolge wie www.host.com und ich muss beginnend davon (in diesem Fall www.) entfernen, um es nur host.com zu machen. Es gibt Array dieser Anfänge (wie: m., wap. und so weiter). Wie geht es effektiv und schnell?Was ist der effektivste und schnellste Weg, um String von Anfang an zu entfernen? (PHP-Mikro-Optimierung)

Derzeit bin ich diesen Code, aber ich denke, es sollte eine bessere/schnellere/sauberere Weg:

<?php 

function _without_start($val, $start) 
{ 
    if(_starts($val, $start)) 
    { 
     $len = mb_strlen($start); 
     $val = mb_substr($val, $len); 
    } 

    return $val; 
} 

function _starts($str, $needle) 
{ 
    return (mb_substr($str, 0, mb_strlen($needle)) === $needle); 
} 

/********************************************/ 

$host = 'www.host.com'; 

$remove_from_beginning = array('www.', 'wap.', 'admin.'); 
foreach($remove_from_beginning as $start) 
{ 
    $host = _without_start($host, $start); 
} 

var_dump($host); 
+0

Verwendung 'explode' und' in_array', nicht ein regulärer Ausdruck. –

Antwort

2

Sie müssen zum Entfernen von Somethings von String foreach nicht, wird dies ein besser sein,

$url = preg_replace("/^(www|wap)\./si","","www.wap.com"); 
echo $url; 
0

Da Sie hat einen Regex Tag eine Liste mit Änderung in regex machen und es gegen die Zeichenfolge überprüfen und mit empty Zeichenfolge ersetzen.

Regex:^(www|admin|wap)\.

Regex101 Demo

1

Mit explode und in_array:

function _without_start($host, $prefixes) { 
    list($prefix, $remainder) = explode('.', $host, 2); 
    return in_array($prefix, $prefixes) ? $remainder : $host; 
} 

$prefixes = ['www', 'wap', 'admin']; 
$host = 'www.host.com'; 

echo _without_start($host, $prefixes); 
+0

Schönes Beispiel;) – WebDevHere

0

Wenn Sie sich für eine regex basierte Lösung (als einer der Tag erwähnt regex) sind , hier gehts

$remove_from_beginning = array('www.', 'wap.', 'admin.'); 
$final = ""; 

foreach($remove_from_beginning as $start) 
{ 
    $final = $final . "" . substr_replace($start, '', -1) . "" . "\.|"; 
} 

$final = substr_replace($final, '', -1); 

echo preg_replace("/" . "" . "(?:" . "" . $final . "" . ")" . "" . "(.*)" . "" . "/", "$1", "www.exaple.com"); 

Ideone Demo