循環是否有更好的方式,通過$ _SESSION變量(或數組)超過一個特定的字符串搜索:
foreach($_SESSION as $k => $v){
if(strstr($k, 'p_')){
感謝。
編輯:我的鑰匙將類似於:
p_123 p_456 i_123 ...
循環是否有更好的方式,通過$ _SESSION變量(或數組)超過一個特定的字符串搜索:
foreach($_SESSION as $k => $v){
if(strstr($k, 'p_')){
感謝。
編輯:我的鑰匙將類似於:
p_123 p_456 i_123 ...
如果你的$_SESSION
結構必須保持「原樣」,IMO是好的。
但是,如果所有'p_'元素都可以在像$_SESSION['p'] = array('key1' => 'val1', ...)
這樣的數組索引下運行,那麼您可以一次檢索所有'p'元素。
順便說一句,這只是微型優化,與你很好的結構。
編輯:只是要小心strstr()
:如果有一天你必須像i_123_p_456將密鑰存儲到您的$_SESSION
數組,你應該切換到if (strpos($k, 'p_') === 0)
。
my $ _SESSION鍵全部以'p_'或其他字符作爲前綴,然後是下劃線。 – etm124
然後你的方式很好。 @ etm124這是你正在尋找的答案。 –
如果你對當前的$ _SESSION結構沒有問題,我想不出比你更好的方式來訪問'p_'元素。 –
試試這個:
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.
}
}
這不會做完全相同的事情,請參閱http://www.php.net/strstr和http://www.php.net/array_key_exists –
不完全。 'strstr()'函數在字符串內搜索一個字符串。他希望匹配'p_hello'或'worldp_',而不僅僅是'p_'。 –
'array_key_exists'不會找到確切的字符串(在本例中爲'p_')嗎?我的$ _SESSION變量看起來與此類似:'$ _SESSION ['p_123']'。 – etm124
我在添加另一個答案,因爲我採取了完全不同的方法。
如果你打算做很多事情,你可以考慮使用過濾器。
function pprefix($var) {
return(strstr($var, 'p_'));
}
$filtered = array_filter(array_keys($_SESSION), "pprefix");
foreach($fildered as $k) {
echo("$k => " . $_SESSION[$k]);
}
感謝Sergio的意見,因爲我喜歡看到其他的做事方式。 – etm124
感謝分享! –
這取決於:你有一個或多個'p_'鍵在數組中? –
我編輯了我的問題來回答你的問題,真相。 – etm124