2017-05-09 80 views
0

我必須在PHP接收來自阿賈克斯/ JavaScript的一個數組象下面這樣:如何準備/建立從Javascript多維數組發送到PHP

$search = $_POST['query']; 
$search = array(
    'category1' => array('include' => array(93, 52),'exclude' => array(72)), 
    'category2' => array('include' => array(93, 52)), 
    'category3' => array('exclude' => array(72)), 
    'category4' => array() 
); 

在我的JavaScript頁面,該陣列由用戶操作前建成發送。 用戶選擇類別和項目來構建它。

例如,我最後的JavaScript數組必須像如下:

my_array = '{ 
     "category1":{ 
      "include":["93","52"], 
      "exclude":["72"] 
     }, 
     "category2":{ 
      "include":["93","52"] 
     }, 
     "category3":{ 
      "exclude":["72"] 
     }, 
     "category4":[] 
     }'; 

我嘗試了很多query.push,但如果選擇了品類繁多這是行不通的。

我無力:

  • 在新類別添加項目時類別在我的全局數組
  • 已經存在,從指定的類別中刪除特定的項目,因爲該標識符是一個變量:

(例如:刪除 '52' 在 「類別2」:{ 「包括」:[ 「93」, 「52」]},

描述:

  • 一個類別項ID可被放置在「包括」部分OR「排除」指定類別的部分(但不是在兩者)

  • 一個項目(標籤)根據類別可以有3種狀態(類):

    • BTN-默認:項目沒有選擇,項目ID必須被移除指定的數組
    • BTN-危險的:項目排除在外,產品ID米UST存在於指定的數組的「排除名單
    • BTN-初級:INTEM包括,項目編號必須存在於「包括」指定數組的列表

這裏是的jsfiddle鏈接:JSFIDDLE

謝謝。

+1

您可以發佈您的AJAX代碼請? – War10ck

+0

像你這樣的聲音如果可能的話,以json格式發送數組要好得多。 –

+0

我還沒有AJAX,我必須準備數據發送之前.. 我將發送這個數組在POST到我的PHP腳本。 我覺得我的問題不清楚..我可以澄清 – mytom

回答

0

你可以按照下面的邏輯來實現你想要的:

var my_array={}; // creating empty array object 

my_array.category1={}; // creating new filed in my_array 

var include1 = new Array(); //creating include array for category 1 
include1.push("93"); // push include values 
include1.push("52"); 

var exclude1 = new Array(); // creating exclude array for category1, if you want 
exclude1.push("72"); // push exclude values 


my_array.category1.include=include1; // finally add it to category1 
my_array.category1.exclude=exclude1; 

alert(JSON.stringify(my_array)); // convert your object to JSON string 

現在,如果要添加新的價值包括排除組別,那麼你只需要推動這些價值在他們各自的陣列中。

+0

好的,謝謝,但我使用變量(類別)來存儲類別值,並且此變量不被解釋爲值。你可以在這裏看到:[link](https://jsfiddle.net/t02donb0/2/)。 你知道如何改正它嗎? – mytom

+0

我已經更新了它現在正在工作的小提琴。 :) –

+0

爲了澄清我的問題,我做了一個新的小提琴。你可以看看[JSFIDDLE](https://jsfiddle.net/mytom/oyr3g25b/)。 – mytom

1

在Javascript中,這是一個數組:[],這是一個對象:{}。因此,這是我怎麼會在JS創建我的數組:

var my_array = [ 
    {'category1':{'include':[1,2,3], 'exclude':[5]}}, 
    {'category2':{'include':[3,4,5], 'exclude':[6,7,8]}}, 
    {'category3':{'include':[1,2], 'exclude':[7]}} 
    ]; 

這裏是一個小提琴演示如何推動新值到數組:https://jsfiddle.net/h15emr8j/

如果你想推一個值的特定部分下面是你如何做到這一點:

my_array[0].category1.exclude.push(100); 
+0

好的,以及如何推一個簡單的值,例如'100'來獲得: {'category3':{'include':[1,2],'exclude':[7,100]}} – mytom

+0

@mytom簡單地使用'my_array.push(value)' –

+0

@mytom看看我的答案。我用小提琴更新了它,這樣您就可以看到如何將新值推入陣列 –

0

最簡單的解決方案可能是這樣的。

const jsonArray = [{ 
    category: { 
    include: ["93", "52"], 
    exclude: ["72"] 
    } 
    .. 
}]; 
+0

是的,但是我的問題是給這個數組添加一個值..我不知道這麼做。當添加'100'以獲得:例外:[「72」,「100」] – mytom

+0

*然後你必須這樣做,例如* 'let value:string = 100; jsonArray [0] .category.exclude.push(value);' –

+0

爲了澄清我的問題,我做了一個新的小提琴。你可以看看[JSFIDDLE](https://jsfiddle.net/mytom/oyr3g25b/)。 ? – mytom

0

JS代碼

my_array = {"category1": {"include": ["93", "52"], "exclude": ["72"]}, "category2": {"include": ["93", "52"]}, "category3": {"exclude": ["72"]}, "category4":[]}; 
console.log(my_array); 
$.post("array.php", {query: my_array}, function(data) { 
    console.log(data); 
}, "text"); 

PHP代碼

<?php 
    $search = $_POST['query']; 
    print_r($search["category1"]["exclude"]); 
0

那麼幾個好東西要學在這裏。初始化數組中javasript:

var arr = ['include','exclude']; 
arr['include'] = []; 
arr['exclude'] = []; 

接下來,我們需要使用Ajax我們的陣列發送到PHP腳本:

var jsonString = JSON.stringify(arr); 

$.ajax({ 
url: 'myscript.php', 
type: 'POST', 
data:{ 
     arr: jsonString 
    }, 
success: function(result){ 
//continue with results 
}, 
error: function(result){ 
//continue with results 
} 
}); 

最後在PHP端:

$arr = json_decode($_POST['arr']); 

//code to execute 

echo json_encode($arr);