0

我认为我想做的事情真的很简单,但无法让它发挥作用。我正在遍历一个表并从现有行中获取一些值,这部分有效。然后我使用 AJAX 尝试制作一个没有重复的多维数组,但有些东西不起作用。我真正想做的是删除重复的部分,重新​​排列数组和 array_push 新值。这是我所拥有的:

阿贾克斯:

function getData(){
    $("#table .mainTR").each(function(){
        var key = $(this).find(".key").text();
        var sel = $(this).find(".s").val();
        var q = $(this).find(".q").val();
        $.ajax({
            type: "POST",
            async: false,
            data: {key: key, s: sel, q: q}
        });
    });
}

PHP:

if(isset($_POST['key'])){
$title = $_POST['key'];
$s = $_POST['s'];
$q = $_POST['q'];
if(!empty($_SESSION['check'])){
    foreach ($_SESSION['check'] as $key=>$value){
        if(in_array($title, $value)){
            unset ($_SESSION['check'][$title]);
            $_SESSION['check'] = array_values($_SESSION['check']);
            array_push($_SESSION['check'], array("key"=>$title, "s"=>$s, "q"=>$q));
        }
    }
}else{
    $_SESSION['check'] = array(array("key"=>$title, "s"=>$s, "q"=>$q));
}
}

逻辑有问题吗?似乎它应该工作。尝试删除表行时,相同的 foreach 循环起作用。它找到正确的 KEY 并将其删除。为什么它在这里不起作用?

4

1 回答 1

0

这是我经过数小时的搜索得到的答案。我避免使用序列化,因为......我不明白如何使用它。在 JS 中,我正在循环查找表中的值并创建一个像这样的数组:

function getData(){
    var checkArray = new Array();
    $("#shopCart .mainTR").each(function(){
        var key = $(this).find(".key").text();
        var sel = $(this).find(".s").val();
        var q = $(this).find(".q").val();
        checkArray.push(key);
        checkArray.push(sel);
        checkArray.push(q);
    });
    $.ajax({
        type: "POST",
        data: {ch: checkArray}
    });
}

在我的 PHP 中,我发现了一个很酷的技巧。由于我正在控制数组中的数据,因此我知道其中会有多少个值。我发现的技巧是“array_chunk”,所以对于 3 个值,我这样做:

if(isset($_POST['ch']) && (!empty($_POST['ch']))){
    unset($_SESSION['check']);
    $_SESSION['check'] = array_chunk($_POST['ch'], 3);
}

所以我只是清除会话变量并添加新值。这消除了所有的检查和清理等等。我确信有更好的方法可以做到这一点,但这种方法很短而且有效,这就是我正在寻找的。希望这对某人有帮助!

于 2013-05-13T20:38:25.600 回答