2013-04-21 130 views
1

我有一個數據庫中的項目數組。Array to javascript

`$this->ingredientsHistory` is the variable that contains the array. 

我想這個轉換成JavaScript變種,將保存所有,然後我可以在自動完成的jQuery UI功能使用它們。

我試圖var ingredients = <?php echo json_encode($this->ingredientsHistory); ?>

這是一個print_r($this->ingredientsHistory);輸出的一個例子...

陣列([0] =>陣列([名稱] =>桔子)[1] = >陣列([名稱] =>雞))

任何幫助,將不勝感激。

編輯 - 的更多信息:

$(function() { 
var ingredients = <?php echo json_encode($this->ingredientsHistory); ?>; 
console.log(ingredients); 
//this is the default tags that jquery gives me - i need to turn ingredients into something similar. 
var availableTags = [ 
    "ActionScript", 
    "AppleScript", 
    "Asp", 
    "BASIC", 
    "C", 
    "C++", 
    "Clojure", 
    "COBOL", 
    "ColdFusion", 
    "Erlang", 
    "Fortran", 
    "Groovy", 
    "Haskell", 
    "Java", 
    "JavaScript", 
    "Lisp", 
    "Perl", 
    "PHP", 
    "Python", 
    "Ruby", 
    "Scala", 
    "Scheme" 
]; 
$("#tags").autocomplete({ 
    source: ingredients 
}); 

});

+0

嘗試與各地<?PHP的雙引號... – 2013-04-21 15:53:34

+1

那麼你的問題是什麼? – Musa 2013-04-21 15:56:26

+0

我認爲你需要一個分號後,你的回聲就像這樣:''var echo ='?php echo json_encode($ this-> ingredientsHistory); ?>;' – 2013-04-21 16:06:16

回答

2

你的問題是,你必須從你的PHP數組中提取每個名稱屬性。

使用這樣的

<?php 

$ingredientsArray = array(
    array('name' => "Lettuce"), 
    array('name' => "Butter"), 
    array('name' => "Chocolate"), 
    array('name' => "Cheese"), 
); // This is your original data structure 

$resultArray = array(); // Let's treat it to get a plain array of ingredient names 
foreach ($ingredientsArray as $ingredient) 
    $resultArray[] = $ingredient['name']; 

// And finally, output it 
echo json_encode($resultArray); 

如果你真的想要得到它在JS-只(雖然我不建議這樣做,如果你在你的$ingredientsArray可變

$(function() { 
    // Your PHP-to-JSON stuff 
    var ingredientsArray = <?php echo json_encode($ingredientsArray); ?>; 

    var ingredientNames = []; // There are faster ways such as reduce, but it's the most browser-compatible way to do this. 
    for (int i = 0, l = ingredientsArray.length; i < l; ++i) 
     ingredientNames.push(ingredientsArray[i]['name']); 

    // Then assign it to your autocomplete plugin 
    $('#tags').autocomplete({ source: ingredientNames }); 
}); 
敏感數據

注意hasOwnProperty尚未使用,因爲我們已經知道的數組中的數據格式。

+0

完美,我知道我正在處理一個多維數組,這就是爲什麼我發佈代碼如此深刻。我不確定是否有一種JavaScript的方式進入陣列!這雖然有用,但謝謝! – sark9012 2013-04-21 17:26:05

+0

你仍然可以用相同的方式在JS中迭代它,然後編輯我的帖子:) – 2013-04-21 17:30:52

0

您可以執行PHP迭代以將元素推入Array。

<script> 
var jsArray = new Array(); 
<?php 
    for ($this->ingredientsHistory as $value) 
?> 
jsArray.push(<?=$value?>); 
<?php 
    } 
?> 
</script> 
1
echo json_encode($this->ingredientsHistory); 

使用JSON的方式與客戶進行溝通。簡單,快速,廣泛支持等。不可能更簡單。而在客戶端(JavaScript)中,您有JSON.stringifyJSON.parse來處理此問題。

原生支持是不可靠的,在傳統模式下不能保證,但您可以使用OFFICIAL JSON實現來保證JSON的跨瀏覽器支持。如果您使用的是jQuery,如您所示,您不會遇到任何問題,只需使用jQuery方法即可。

此外,在PHP5,你可以使用

var ingredients = "<?= $this->ingredients; ?>"; 

如果內嵌處理失敗,你總是可以簡單地使用Ajax這一點。

$.ajax({ 
    url: "blabla", 
    data: "blabla", 
    type: "POST", 
    dataType: "json", 
    success: function(serverResponse) { 
     console.log(serverResponse); 
    } 
}); 

echo json_encode(whatever)上的Ajax目標網址。

+0

這不是OP已經在做什麼? – millimoose 2013-04-21 15:56:08

+0

使它成爲一個字符串只是讓你有更多的工作要做。 – Musa 2013-04-21 15:57:21

+0

我已經這樣做了,它不工作? – sark9012 2013-04-21 16:10:13