2013-07-05 10 views
0
function(){ 
return preg_split('/[-]/', $_COOKIE[$cookie_login]); 
} 

我已經返回此,$ _ COOKIE [$ cookie_login]爲 「1-blahblahblah」我是新來的preg_split和正則表達式,我做對了嗎?

然而,當我嘗試檢索這個使用功能上面,像這樣:

$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)作品。

+1

你真的需要一個正則表達式嗎?爲什麼不只是爆炸(' - ',$ _COOKIE [$ cookie_login]);'?附:你的代碼工作正常:http://ideone.com/fCLo6M –

+1

避免使用正則表達式,當你有更好的可用像@ RocketHazmat說 – bystwn22

+0

所以,「print_r($字符串)的作品」?它打印什麼?附:你的正則表達式很好:http://ideone.com/aJVrvO –

回答

1
function(){ 
    return explode('-', $_COOKIE[$cookie_login]); 
} 
+2

你使用explode而不是expreg的想法很有趣,但是你錯過了未定義的本地變量的點;)+1雖然對於爆炸但是 –

+0

是的,你'對了。謝謝你的修正 –

3

您使用$cookie_login在函數中,但該變量沒有在任何地方定義。也許它應該只是

$_COOKIE['cookie_login'] 

取而代之?

同樣,在正則表達式中[-]-相同。這不是「錯誤的」,爲單個字符指定字符類只是多餘的。


後續:好了,現在你已經張貼更多,這裏是你可以做一個重大的變化

不要使用GLOBALS你已經有了一個功能,所以通過在cookie名稱作爲放慢參數:

function get_sesssion($name) { 
    return preg_split('/-/', $_COOKIE[$name]); 
} 
$sess = get_session('cookie_login'); 
+0

啊!是的,那可能是他的問題。 '$ cookie_login'在他的函數中是未定義的。 –

+0

不,不,我有全球$ cookie_login;設置,它只是一個字符串 – SuperBeast

+0

@ user1925957:只是因爲它是全局的並不意味着該函數可以讀取它。你怎麼調用這個函數?您可能需要爲其添加'global $ cookie_login;'。或者傳遞'$ cookie_login'作爲參數。嘗試''var_dump($ cookie_login)''在你的函數中,只是爲了確保。 –

0

使用isset檢查cookie存在,我假定其cookie_login,而不是$cookie_login,或者它真的$cookie_login,請嘗試使用global $cookie_login你的函數裏面,或者把它作爲一個功能argumentvar_dump時,如果你有bool(false),這意味着該Cookie(那是更好的選擇,而不是設置全局)

<?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; 
    } 
?> 

是沒有設置,否則你將得到至少一個數組:\

0
preg_split('/[-]/', $_COOKIE[$cookie_login]); 

由於-是一個特殊的RegEx character,請考慮像這樣轉義它\\-

preg_split('~[\\-]~', $_COOKIE[$cookie_login]); 

^我用~作爲RegEx patterns/太廣泛應用於HTML/XML的包裝特性。

相關問題