这个真的很烦我,找不到一个简单的解决方案。
在产品的详细视图中,我将信息设置为会话,最多4个:
<td style="text-align: left; border: 1px solid black" ><select
id="roleId" name="roleId" class="text">
<option>Select</option>
<c:forEach var="role" items="${roleDetails}">
<option value="${role.roleId }">${role.roleDescription}</option>
</c:forEach>
</select>
<select id="userIdEmail" name="userIdEmail" class="text">
<option >Select</option>
</select>
</td>
如果我输出会话,这部分有效: 编辑图片=&gt;如果我重新加载详细视图
,就会发生这种情况
我正在努力的部分是,当我重新加载详细信息视图时,会话中的信息是重复的。
我如何防止这种情况发生?
我用$_SESSION['recent'][] = array(
'id' => $productimgfolder,
'title' => $product['Product']['title'],
'link' => $_SERVER['REQUEST_URI'],
'image' => 'img/products/'.$productimgfolder.'/'.$product['Product']['mainpicture']
);
$_SESSION['recent'] = array_slice($_SESSION['recent'],-4);
和&amp; in_array
,我做错了什么
答案 0 :(得分:5)
简单的解决方案:
如果id是唯一的,你可以这样做:
if(!array_key_exists ($productimgfolder, $_SESSION['recent']))
{
$_SESSION['recent'][$productimgfolder] = array(
'id' => $productimgfolder,
'title' => $product['Product']['title'],
'link' => $_SERVER['REQUEST_URI'],
'image' => 'img/products/'.$productimgfolder.'/'.$product['Product']['mainpicture']
);
}
$_SESSION['recent']=array_slice($arr, -4, 4, true);
另外,你必须预先处理最近的数组并在循环中检查id ...
答案 1 :(得分:0)
您需要检查isset
if(!isset($_SESSION['recent']))
{
$_SESSION['recent'] = array()
}
如果会话空虚,那么你可以检查
if(empty($_SESSION['recent']))
{
//here you add your data
}
因为您正在使用数组推送,所以在页面重新加载时它会添加数据,除非您检查会话是否为空。如果是,则向会话添加数据。
答案 2 :(得分:0)
可能有不同的解决方案;
array_unshift($sessionArray, $singleArrayElement);
if (count($sessionArray) > 4) {
array_pop($seassionArray);
};