2012-05-10 89 views
1

我有一個JSON數組,我需要搜索:搜索基於變量的JSON數組?

[ 
{ 
     "Device_ID":"1", 
     "Image":"HTC-One-X.png", 
     "Manufacturer":"HTC", 
     "Model":"One X", 
     "Region":"GSM", 
     "Type":"Phone" 
    }, 
    { 
     "Device_ID":"2", 
     "Image":"Motorola-Xoom.png", 
     "Manufacturer":"Motorola", 
     "Model":"Xoom", 
     "Region":"CDMA", 
     "Type":"Tablet" 
    }, 
    { 
     "Device_ID":"8", 
     "Image":"null", 
     "Manufacturer":"Motorola", 
     "Model":"Xoom 2", 
     "Region":"CDMA", 
     "Type":"Tablet" 
    } 
] 

使用關鍵字:$_GET['keyword'];我需要能夠做到以下幾點。 搜索製造商和型號的組合值,即。摩托羅拉Xoom。然後,無論哪一組值與此匹配,都將它們輸出到變量中。

例如:如果關鍵字是HTC,那麼它會搜索陣列輸出:

$DeviceID = 1 $Image = HTC-One-X.png $Manufacturer = HTC $Model = One 
X $Region = GSM $Type = Type 

但是,如果關鍵詞是摩托羅拉,那就需要輸出,其中包括摩托羅拉的所有條目。

即時消息試圖做的是輸出所有JSON數組條目的實時視圖,因爲用戶鍵入關鍵字。不過,我希望這可以在用戶計算機上運行,​​以減少服務器上的負載。

有沒有人知道最好的方式去做這件事?

+1

然後你必須使用javascript。 – SirDarius

+0

哎呀,不知道爲什麼我加了php而不是javascript標籤。排序 – K20GH

+1

你有什麼問題?好像你必須迭代數組,看看關鍵字是否在'製造商'屬性中。我也沒有看到這個問題是如何與JSON相關的,除了你得到的數據爲JSON(但你似乎沒有* JSON的問題)。 –

回答

1

好,如果你有在選項部分製造商的值的選擇框它是那麼容易,因爲:

HTML:

<select id="selectionBox"> 
    <option>...</option> 
</select> 
<div id="outPut"> 
    output goes in here 
</div> 

的Javascript:

var selectedValue = document.getElementById("selectionBox").value; 
for(var i = 0; i < jsonObject.length; i++){ 
    if(jsonObject[i].Manufacturer === selectedValue){ 
    //considering your object is an array let's 
    for(var key in jsonObject[i]){ 
     document.getElementById("outPut").innerHTML += jsonObject[i][key] + "</br>"; 
    } 
    } 
} 

那幾乎將對象中的所有內容都打印到輸出div上,其餘部分取決於你的樣式。

1

這是一個過濾JSON的函數。顯示數據取決於您。

var devices = <your JSON array>;  

function filter(keyword, data) { 
    var filteredArray = [], i, j; 
    for (i = 0, j = data.length; i < j; i++) { 
     if ((data[i].Manufacturer && data[i].Manufacturer.indexOf(keyword) !== -1) || (data[i].Model && data[i].Model.indexOf(keyword) !== -1)) { 
      filteredArray.push(data[i]); 
     } 
    } 
    return filteredArray; 
} 

// Example usage 
var MotorolaDevices = filter('Motorola', devices);