在循环遍历$ _SESSION变量时搜索字符串

时间:2011-11-16 18:10:44

标签: php

是否有更好的方法来搜索特定字符串的$ _SESSION变量(或任何数组),而不是:

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

感谢。

编辑:我的键看起来类似于:

p_123 p_456 i_123 ...

3 个答案:

答案 0 :(得分:3)

如果您的$_SESSION结构必须保持“原样”,IMO就可以了。

但是,如果所有'p_'元素都可以在$_SESSION['p'] = array('key1' => 'val1', ...)之类的数组索引下,则可以一次检索所有'p'元素。

顺便说一句,这只是微观优化,请选择你喜欢的结构。

编辑:请注意strstr():如果有一天您必须将 i_123_p_456 等密钥存储到$_SESSION数组中,则应切换到if (strpos($k, 'p_') === 0)

答案 1 :(得分:1)

我正在添加另一个答案,因为我采取了完全不同的方法。

如果您打算这么做,可以考虑使用过滤器。

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

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

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

答案 2 :(得分:-1)

试试这个:

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

或者,如果你只知道密钥名称的一部分(比如beggining),我会使用array_keys()而不是$ k => $ v,像这样:

foreach(array_keys($_SESSION) as $k) {
  if(strstr($k, 'p_')){
    // do something.
  }
}
相关问题