function(){
return preg_split('/[-]/', $_COOKIE[$cookie_login]);
}
我有这个被退回,$_COOKIE[$cookie_login] 是"1-blahblahblah">
然而,当我尝试使用上面的函数检索它时,如下所示:
$string = function();
我得到空字符串,例如$string[0]
和$string[1]
都是空的,我做错了什么?
我正在尝试弄清楚如何使用preg_split就像我使用旧的拆分一样,因为我正在更改为 PHP 5.4
编辑:这是完整的功能:
function get_session(){
global $cookie_login;
if (isset($_COOKIE[$cookie_login])){
return preg_split('/[-]/', $_COOKIE[$cookie_login]);
}
}
和
$string = get_session();
$string[0]
是空的,也是$string[1]
的,但print_r($string)
有效。
你在函数中使用$cookie_login
,但该变量没有在任何地方定义。也许它应该只是
$_COOKIE['cookie_login']
相反?
同样,正则表达式中的[-]
与 -
相同。这不是"错误",只是为单个字符指定字符类有些多余。
跟进:好的,现在你已经发布了更多,这里有一个你可以做的重大改变
不要使用全局变量 你已经有一个函数,所以传入 COOKIE 名称作为参数:
function get_sesssion($name) {
return preg_split('/-/', $_COOKIE[$name]);
}
$sess = get_session('cookie_login');
function(){
return explode('-', $_COOKIE[$cookie_login]);
}
preg_split('/[-]/', $_COOKIE[$cookie_login]);
由于-
是一个特殊的RegEx character
,请考虑像这样\-
逃离它。
preg_split('~[\-]~', $_COOKIE[$cookie_login]);
^ 我使用~
作为RegEx patterns
的包装字符,因为/
在HTML/XML中使用得太广泛了。
使用 isset
检查 cookie 是否存在,我假设它的cookie_login
而不是 $cookie_login
,或者它真的很$cookie_login
,尝试在你的函数中使用global $cookie_login
,或者把它作为一个函数传递argument
(这是比设置全局更好的选择(
<?php
function get_session() {
global $cookie_login;
if ( $cookie_login && isset( $_COOKIE[$cookie_login] ) ) {
return explode( "-", $_COOKIE[$cookie_login] );
}
return false;
}
$string = get_session( 'some_cookie' );
var_dump( $string );
?>
或作为函数argument
<?php
function get_session( $cookie_login = null ) {
if ( $cookie_login && isset( $_COOKIE[$cookie_login] ) ) {
return explode( "-", $_COOKIE[$cookie_login] );
}
return false;
}
?>
当你var_dump
如果你得到bool(false)
这意味着没有设置cookie,否则你至少会得到一个数组:\