开发者

Check if key exists in $_SESSION by building index string

I need to check if a key exists and return its value if it does.

Key can be an array with subkeys or endkey with a value.

$_SESSION['mainKey']['testkey'] = 'value';
var_dump(doesKeyExist('testkey'));
function doesKeyExist($where) {
  $parts = explode('/',$where);
  $str = '';
  for($i = 0,$len = count($p开发者_开发知识库arts);$i<$len;$i++) {
    $str .= '[\''. $parts[$i] .'\']';
  }
  $keycheck = '$_SESSION[\'mainKey\']' . $str;
  if (isset(${$keycheck})) {
    return ${$keycheck};
  }

  // isset($keycheck) = true, as its non-empty. actual content is not checked
  // isset(${$keycheck}) = false, but should be true. ${$var} forces a evaluate content
  // isset($_SESSION['mainKey']['testkey']) = true
}

Using PHP 5.3.3.


Instead of building the string, just check if the key exists within your loop.

For instance:

function doesKeyExist($where) {
  $parts = explode('/',$where);
  $currentPart = $_SESSION['mainKey'];
  foreach($parts as $part) {
    if (!isset($currentPart[$part])) {
      return false;
    }
    $currentPart = $currentPart[$part];
  }
  return true;
}


function getByKeys($keys, $array) {
  $value = $array;
  foreach (explode('/', $keys) as $key) {
    if (isset($value[$key])) {
      $value = $value[$key];
    } else {
      return null;
    }
  }
  return $value;
}


Perhaps I'm misunderstanding the question, but this would appear to be the simplest way of doing it:

function getKey($arr, $key) {
    if (array_key_exists($key, $arr)) {
        return $arr[$key];
    } else {
        return false;
    }
}

$value = getKey($_SESSION['mainKey'], 'testkey');


You should use $$keycheck, not ${$keycheck}.

The last notation is only if you use the variable inside a string (e.g. "${$keycheck}")

See http://php.net/manual/en/language.variables.variable.php for more details about variable variables


You might want to use the eval() php function for this.

function doesKeyExist($where) {
  $parts = explode('/',$where);
  $str = '';
  for($i = 0,$len = count($parts);$i<$len;$i++) {
    $str .= '["'. $parts[$i] .'"]';
  }
  eval('$keycheck = $_SESSION["mainKey"]' . $str . ';');
  if (isset($keycheck)) {
    return $keycheck;
  }
}

HTH

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜