PHP - 会话数组 - 防止重复的委托

时间:2015-04-27 06:58:26

标签: php arrays session

这个真的很烦我,找不到一个简单的解决方案。

在产品的详细视图中,我将信息设置为会话,最多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;如果我重新加载详细视图

,就会发生这种情况

enter image description here

我正在努力的部分是,当我重新加载详细信息视图时,会话中的信息是重复的。

我如何防止这种情况发生?

我用$_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,我做错了什么

3 个答案:

答案 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);
};