2016-04-10 15 views
0

私はwww.host.comのような文字列を持っていて、それをちょうどhost.comにするために、この場合は(この場合はwww.)最初から削除する必要があります。これらの始まりの配列があります(m.wap.など)。どのように効果的かつ迅速にそれを行うには?文字列を最初から削除する最も効果的で最速の方法は何ですか? (PHPの最適化)

現在、私はこのコードを使用していますが、私はより良い/より高速/きれいな方法があるはずだと思う:

<?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

'explode'と' in_array'、ない正規表現を使用します。 –

答えて

2

あなたは文字列から代を除去するためのforeachを必要といけない、この1つは良くなる、

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

あなたが正規表現で変更を使用してリストを作成し、文字列に対してそれをチェックして、empty文字列で置き換えることができます正規表現タグを追加しましたので。

正規表現:explodein_array^(www|admin|wap)\.

Regex101 Demo

1

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

いい例;) – WebDevHere

0

あなたはregexベースのソリューションのためにアップしている場合(タグの一つとしては、regexに言及) 、ここに行く

$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

関連する問題