2011-05-14 95 views
1

我有一個簡單的函數,這樣做查看的項目: 1)用戶查看一些圖像和image_id被存儲在會話陣列 2)然後用戶可以看到最近10觀看的圖像PHP:存儲最後在會話陣列

目前我的功能是這樣的:

function lastSeen($image_id){ 
    if(!isset($_SESSION['lastSeen'])){ 
     $_SESSION['lastSeen'] = array($image_id); 
    }else{ 
     $tmpSession = array_unique($_SESSION['lastSeen']); 
     if(count($tmpSession) > 9){ 
      $tmpSession = array_slice($tmpSession,1); 
     } 
     $tmpSession[] = $image_id; 
     $_SESSION['lastSeen'] = array_unique($tmpSession); 
    } 
    return true; 
} 

此功能,但問題是,如果用戶查看一個圖像多於一次,然後在會話中保存的只有9項。 任何人都可以幫我解決這個問題嗎?也許整個功能需要重寫它...

回答

1

你可能想刪除多餘的條目,從最後的事情,也只有當它超過10項:

else { 
    $tmpSession = $_SESSION['lastSeen']; 
    $tmpSession[] = $image_id; 
    $tmpSession = array_unique($tmpSession); 

    if(count($tmpSession) > 10){ 
     $tmpSession = array_slice($tmpSession,1); 
    } 
    $_SESSION['lastSeen'] = $tmpSession; 
} 
+0

我們如此,這可以按照預期工作。謝謝! – 2011-05-14 08:56:40

1

如果你不介意圖像的順序不改變,當用戶查看一個圖像兩次,然後我會用這個簡單的解決方案。只需添加一行:

if (in_array($image_id, $tmpSession)) return true; 

所以,你的功能應該是這樣的:

function lastSeen($image_id){ 
    if(!isset($_SESSION['lastSeen'])){ 
     $_SESSION['lastSeen'] = array($image_id); 
    } elseif (in_array($image_id, $_SESSION['lastSeen'])) { 
     return true; 
    } else { 
     $tmpSession = array_unique($_SESSION['lastSeen']); 
     if(count($tmpSession) > 9){ 
      $tmpSession = array_slice($tmpSession,1); 
     } 
     $tmpSession[] = $image_id; 
     $_SESSION['lastSeen'] = array_unique($tmpSession); 
    } 
    return true; 
} 
1

你的函數的另一種實現可能是:

function lastSeen($image_id){ 
    if(!isset($_SESSION['lastSeen']) || !is_array($_SESSION['lastSeen'])){ 
      $_SESSION['lastSeen'] = array(); 
    } 

    if(!in_array($image_id, $_SESSION['lastSeen']){ 
      array_push($_SESSION['lastSeen'], $image_id); 
    } 

    if(sizeof($_SESSION['lastSeen']) > 10){ 
      array_shift($_SESSION['lastSeen']); 
    } 
} 
0

如果你想存儲最近訪問過的圖像作爲數組中的最後一項功能,那麼只需更換:

$tmpSession = array_slice($tmpSession,1); 

與以下行:

if (in_array($image_id,$tmpSession)) 
    array_splice($tmpSession, array_search($image_id, $tmpSession), 1); 
else 
    $tmpSession = array_slice($tmpSession, 1); 

結果函數看起來像:

function lastSeen($image_id) { 
if (!isset($_SESSION['lastSeen'])) { 
    $_SESSION['lastSeen'] = array($image_id); 
} else { 
    $tmpSession = array_unique($_SESSION['lastSeen']); 
    if (count($tmpSession) > 9){ 
     if (in_array($image_id,$tmpSession)) 
      array_splice($tmpSession, array_search($image_id, $tmpSession), 1); 
     else 
      $tmpSession = array_slice($tmpSession, 1); 
    } 
    $tmpSession[] = $image_id; 
    $_SESSION['lastSeen'] = array_unique($tmpSession); 
} 
return true; 

}