2011-07-30 14 views
6

Özellikle dizinin sağ tarafında arama yapmaya başlamak için negatif dizinler kullanabileceğiniz için MySQL içinde SUBSTRING_INDEX işlevini seviyorum.PHP: MySQL'in işlevi SUBSTRING_INDEX işlevinin karşılığı mı?

PHP'de bu işlevin bir karşılığı var mı? (Veya kod biraz bunu yapmak için kolay bir yoldur)

+3

, [ 'SUBSTRING_INDEX'] tanımını (http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_substring-index oku) –

cevap

14

Orada bu aynı işlevselliği alır tek kütüphane işlevi, ama tek astar alabilirsiniz:

$str = "www.mysql.com"; 
echo implode('.', array_slice(explode('.', $str), 0, 2)); // prints "www.mysql" 
echo implode('.', array_slice(explode('.', $str), -2)); // prints "mysql.com" 

Kolayca dönüştürelim bir fonksiyonu:

function substring_index($subject, $delim, $count){ 
    if($count < 0){ 
     return implode($delim, array_slice(explode($delim, $subject), $count)); 
    }else{ 
     return implode($delim, array_slice(explode($delim, $subject), 0, $count)); 
    } 
} 
-2
function substring_index($subject, $delim, $count){ 
    if($count < 0){ 
     return implode($delim, array_slice(explode($delim, $subject), $count)); 
    }else{ 
     return implode($delim, array_slice(explode($delim, $subject), 0, $count)); 
    } 
} 
3

Ben

string strstr (string $haystack , mixed $needle [, bool $before_needle = false ]) 
düşünüyorum

, sizin için doğru php işlevidir.

strstr - Merak ettim ve bir emprenye/maç kurulumu kullanarak başka bir yöntemi test bir dize

<?php 
$email = '[email protected]'; 
$domain = strstr($email, '@'); 
echo $domain; // prints @example.com 

$user = strstr($email, '@', true); // As of PHP 5.3.0 
echo $user; // prints name 
?> 
0

ilk oluştuğu, daha sonra/saymak sınırlayıcı herhangi bir sayı için izin vermesini sağlamak için refactored bulur. Sayımı ekledim, diğer örnekte kullandığını kontrol ettim, ama aynı zamanda sınırlayıcı alanın bir tür sanitizasyonunu da tavsiye ederim. `Substr` düşünce olanlar için

function substring_index($subject, $delim, $count){ 
    if($count < 0){ 
    $notRe = '[^\\'.$delim.']*'; 
    $elem = array(); 
    for($x=1;$x<=$count;$x++){ 
     array_push($elem,$notRe); 
    } 
    $re = '/^('.implode('\\'.$delim,$elem).')/'; 
    preg_match($re, $subject,$m); 
    if(count($m) == 2) { 
     return $m[1]; 
    } 
    } 
} 
İlgili konular