PHP会话变量名为字符串
我有一个来自db的字符串,比如PHP会话变量名为字符串,php,Php,我有一个来自db的字符串,比如session\u user\u id,表示我应该从PHP中的session变量中获取用户id。理想情况下,这应该转换为值存在的$\u会话['user']['id']。下面的方法似乎不起作用 echo fillDefaultValues("session_user_id"); function fillDefaultValues($val) { $expval = explode("_", $val); $j
session\u user\u id
,表示我应该从PHP中的session变量中获取用户id。理想情况下,这应该转换为值存在的$\u会话['user']['id']
。下面的方法似乎不起作用
echo fillDefaultValues("session_user_id");
function fillDefaultValues($val)
{
$expval = explode("_", $val);
$j = "";
if ($expval[0] == 'session') {
for ($i=1; $i < count($expval); $i++) {
$j .= "[".$expval[$i]."]";
}
$sessVal = $_SESSION[$j];
}
return $sessVal;
};
echo filldefaultvalue(“会话用户id”);
函数fillDefaultValues($val)
{
$expval=explode(“quo,$val”);
$j=”“;
如果($expval[0]=='session'){
对于($i=1;$i
我尝试过像
$sessVal=$\u SESSION.$j
,$sessVal=${$\u SESSION.$j}
,$sessVal=$\u SESSION[$j]
这样的变体,但似乎都不起作用。这个问题类似于使用点或斜线符号(x.y.z
,x/y/z
)访问数组的更深层次。实现它的一种方法是迭代路径,并在到达时返回请求的级别。下面是一个简单的非递归函数:
function array_deep(array $array, string $key_path, string $separator = '/')
{
$path = explode($separator, $key_path);
$ref =& $array;
foreach($path as $node) {
if (isset($ref[$node])) {
$ref =& $ref[$node];
}
else {
// die('Undefined Index:' . $key_path); // or use your error-handling routine
return null;
}
}
return $ref;
}
我们在上面所做的是为数组的每个渐进深度指定一个引用,然后访问下一个级别的值,直到路径结束。如果给定的键不存在,函数将返回null
。您可能希望在此处实现错误/异常处理程序,以区分“索引不存在”与实际的null
值。用法如下:
// sample array:
$array['x']['y']['z'] = 'yay';
// accessing the value:
$value = array_deep($array, 'x/y/z', '/');
echo $value; // yay
您可以使用您选择的任何分隔符。对于您的情况,您可以拨打:
$value = array_deep($_SESSION, 'user_id', '_');
请注意,来自数据库的变量名中的“session_uu”前缀在这里是noise,因为它不构成数组结构的一部分(并且因为我们将$\u session
作为数组传递),所以应该在前面进行修剪;e、 g.as$path=substr($path,strlen('session')
如果在多种情况下应用此方法,请确保来自数据库的任何变量名都与本地变量中的数据模式相匹配,每个分隔符表示更深的数组级别。只有在引用模式一致的情况下,才能自动执行此操作
请注意,所有分隔符都将分解为路径级别,因此使用的分隔符不属于PHP“word”的一部分建议使用。由于通常使用一个
下划线来表示空格,因此将其用作分隔符时可能会出错。请考虑用户/用户详细信息/第一个\u名称
与用户详细信息\u第一个\u名称
:第一个是清晰的,第二个是不明确的。您的代码正在查找$\u会话['[user][id]]
不存在。从$sessVal=$\u会话开始,然后$sessVal=$sessVal[$expval[$i]];
并重复。执行$\u会话['user']['id']
是的,不要尝试生成PHP代码。请阅读有关使用@axiac访问数组项的内容。我的问题是,当我不知道级别数时,如何构建它?谢谢。我将尝试此方法。我的引用模式是一致的,只是我不知道级别数或数组名称(在会话之后)。使用此解决方案,您可以根据字符串中给定的“数组路径”遍历任意级别/深度。如果您的字符串是users\u ravi\u details\u birth\u year
,它将生成$arr['users']['ravi']['details']['birth']['year']
。