2013-05-12 123 views
0

我認爲我想要做的事情非常簡單,但無法讓它工作。我循環遍歷一個表並從現有行獲取一些值,該部分起作用。然後我使用AJAX嘗試製作一個沒有重複的多維數組,但有些東西不起作用。我真正想要做的是刪除重複部分,重新​​排列數組和array_push新值。下面是我有:jquery每個循環成一個多個陣列,檢查重複項

AJAX:

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並刪除它。爲什麼它不在這裏工作?

+1

你可否澄清一下?哪部分工作? PHP?與此同時,我注意到你爲每個「#table.mainTR」解僱了$ .ajax。也許準備一個數據結構並通過$ .ajax發送一次可能是第一步。 – sixFingers 2013-05-12 14:27:57

+0

工作的部分是在jQuery中獲取正確的行數據。而且,是的,我注意到,它被觸發的次數與行數一樣多。你會如何建議我準備?將數據組合在一起,然後在PHP中分離? – user2025469 2013-05-12 14:33:25

+0

將請求序列化爲JSON,並通過PHP中的「json_decode」對其進行反序列化。另外不要使用'async:false'。 – moonwave99 2013-05-12 14:35:35

回答

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

所以我只是清除會話變量,並加入新值。這消除了所有的檢查和清除以及所有這些。我相信有更好的方法可以做到這一點,但這種方法很簡單,可以工作,這就是我正在尋找的。希望這可以幫助別人!