2011-11-16 41 views
2

循環是否有更好的方式,通過$ _SESSION變量(或數組)超過一個特定的字符串搜索:

foreach($_SESSION as $k => $v){ 
    if(strstr($k, 'p_')){ 

感謝。

編輯:我的鑰匙將類似於:

p_123 p_456 i_123 ...

+0

這取決於:你有一個或多個'p_'鍵在數組中? –

+0

我編輯了我的問題來回答你的問題,真相。 – etm124

回答

3

如果你的$_SESSION結構必須保持「原樣」,IMO是好的。

但是,如果所有'p_'元素都可以在像$_SESSION['p'] = array('key1' => 'val1', ...)這樣的數組索引下運行,那麼您可以一次檢索所有'p'元素。

順便說一句,這只是微型優化,與你很好的結構。

編輯:只是要小心strstr():如果有一天你必須像i_123_p_456將密鑰存儲到您的$_SESSION數組,你應該切換到if (strpos($k, 'p_') === 0)

+0

my $ _SESSION鍵全部以'p_'或其他字符作爲前綴,然後是下劃線。 – etm124

+2

然後你的方式很好。 @ etm124這是你正在尋找的答案。 –

+0

如果你對當前的$ _SESSION結構沒有問題,我想不出比你更好的方式來訪問'p_'元素。 –

-1

試試這個:

if (array_key_exists('p_', $_SESSION)) { 
    echo($_SESSION['p_']); 
} 

或者,如果你只知道名稱的一部分(如開始),我會使用array_keys(),而不是$ k => $ v,如下所示:

foreach(array_keys($_SESSION) as $k) { 
    if(strstr($k, 'p_')){ 
    // do something. 
    } 
} 
+0

這不會做完全相同的事情,請參閱http://www.php.net/strstr和http://www.php.net/array_key_exists –

+1

不完全。 'strstr()'函數在字符串內搜索一個字符串。他希望匹配'p_hello'或'worldp_',而不僅僅是'p_'。 –

+0

'array_key_exists'不會找到確切的字符串(在本例中爲'p_')嗎?我的$ _SESSION變量看起來與此類似:'$ _SESSION ['p_123']'。 – etm124

1

我在添加另一個答案,因爲我採取了完全不同的方法。

如果你打算做很多事情,你可以考慮使用過濾器。

function pprefix($var) { 
    return(strstr($var, 'p_')); 
} 

$filtered = array_filter(array_keys($_SESSION), "pprefix"); 

foreach($fildered as $k) { 
    echo("$k => " . $_SESSION[$k]); 
} 
+0

感謝Sergio的意見,因爲我喜歡看到其他的做事方式。 – etm124

+0

感謝分享! –