2009-09-18 123 views
2

我知道我們有PHP in_array功能找到字符串開頭的字符串數組內的PHP

,但我正在尋找一種方式來找到誰開始字符串數組值的特定字符串匹配

例如找到...

$search_string = '<div>1</div>'; 
在這樣一個數組

...

$array = (
    'sample' => '<div>1</div><p>fish food</p>', 
    'sample2' => '<div>2</div><p>swine</p> 
); 

沒有道理

+0

可以使用str_pos – 2009-09-18 11:17:53

回答

2

您可以在陣列的所有行循環,並且在每個字符串中使用strpos;有點像這樣:

$search_string = '<div>1</div>'; 
$array = array(
    'sample' => '<div>1</div><p>fish food</p>', 
    'sample2' => '<div>2</div><p>swine</p>' 
); 

foreach ($array as $key => $string) { 
    if (strpos($string, $search_string) === 0) { 
    var_dump($key); 
    } 
} 

這將讓你與你的搜索字符串開頭的行的關鍵:

string 'sample' (length=6) 


或者preg_grep可能做的伎倆太:

返回由 與給定模式匹配的輸入數組的 元素組成的數組。

例如:

$result = preg_grep('/^' . preg_quote($search_string, '/') . '/', $array); 
var_dump($result); 

(不要忘了使用preg_quote!)

會得到你:

array 
    'sample' => string '<div>1</div><p>fish food</p>' (length=28) 

需要注意的是,這樣一來,你不要拿到鑰匙,但只有線的內容。

+0

我決定採用strpos,因爲我認爲它比正則表達式更有效率,並且我對字符串有很多控制權 – mjr 2009-09-22 15:02:44

1

你需要使用正則表達式。檢查這tutorial

1

爲什麼不循環你的數組並檢查正則表達式,或者strstr或substr(...)== $ search_string?

$res = ""; 
foreach($array as $key => $value) { 
    if(substr(0, strlen($search_string)-1, $value) == $search_string) { 
    $res = $key; 
    break; 
    } 
} 
+0

Yo Palantir,我真的爲你高興,Imma讓你完成,但Ionut有史以來最好的答案之一! – Imagist 2009-09-18 11:23:27

+0

@Imagist,真的嗎?你是指我在這個問題上的答案還是另一個? – 2009-09-18 11:37:23

1

如果你只需要找到$array內的任何字符串是否始於$search_string(基本上替代in_array()將檢查字符串的開頭),你也可以使用array_reduce()

array_reduce($array, function ($contains, $item) use ($search_string) { 
    return $contains = $contains || (strpos($search_string, $item) === 0); 
}, false);