2011-12-07 172 views
3

Iam使用PHP,Smarty配置。如何從php數組創建一個java腳本數組?

蔭獲得在PHP數組並把它交給tpl.I想使TPL JavaScript數組從PHP數組。

PHP數組

Array 
(
    [0] => Array 
     (
      [dt] => 2011-12-02 
      [number] => 3 
     ) 

    [1] => Array 
     (
      [dt] => 2011-12-05 
      [number] => 3 
     ) 

    [2] => Array 
     (
      [dt] => 2011-12-07 
      [number] => 2 
     ) 

) 

,我想它作爲一個Java腳本陣列TPL

s1 = [[[2011-12-02, 3],[2011-12-05,3],[2011-12-07,2]]]; 
+0

兩個數組都不太相當於 – Teneff

+0

對不起,什麼差別..我找不到它 – user1029108

+0

,你可以用PHP通過'輸入保存[類型=隱藏]'爲一個字符串,閱讀和與它解析JS – mreq

回答

11

你不得不遍歷它來生成陣列

<script> 
    var arr = []; 
    <?php foreach ($arr as $item) : ?> 
    arr.push(['<?php echo $item['dt']?>', <?php echo $item['number']?>]); 
    <?php endforeach; ?> 
</script> 

這會給你一個數組的數組。

不過,我會做的另一種方式。我只是用JSON編碼,並把它作爲一個對象

<script> 
    var data = <?php echo json_encode($arr)?>; 
    for (var x in data) { 
     //data[x].dt; 
     //data[x].number; 
    } 
</script> 
+0

呵呵,在讀完上半場之後,我會冷靜下來,但後來看到你確實提出了'json_encode'。但是你真的應該使用'var x'而不是'x'。全局變量很糟糕。儘管在腳本標籤內部並不重要,但最終代碼可能在函數內部的機會很大。 – ThiefMaster

+0

你完全正確,錯過了'var'。補充,謝謝。 – JohnP

+0

第一個人會不會把'2011-12-02'當成'1997'(因爲'-'是算術運算符)? – KingCrunch

1

您可以使用PHP函數json_encode到陣列編碼爲JSON,然後用它像對象數組在javascript

0

第一總之:這些數組並不等同。

$array = array_map('array_values', $array); 

這一個相當於要看到的JS-陣列

$js = json_encode($array); 

如果要保持締合的鍵的一個(內)陣列,只需要省略第一個表達式。

+0

如何從變量$ js獲取json編碼的值到tpl中的java腳本?請幫助我這是迫切.. – user1029108

+0

像往常一樣:'' – KingCrunch

0

如果你想這樣做的Smarty模板,循環在你的PHP數組和輸出的JavaScript數組元素,除了最後一個的每一個元素後添加逗號。

s1 = [ 
{foreach from=$myArray item=item name=loop} 
    [{$item['dt']}, {$item['number']}] {if $smarty.foreach.loop.last == false},{/if} 
{/foreach} 
] 

正如其他人所說,儘管 - 在PHP中將數組編碼爲JSON似乎更簡單,更簡單。通過在第三方物流的PHP數組

var array = new array(); 

循環,並創建JavaScript數組

foreach($phparray as $i => $ary) { 
    echo "array[".$i."] = new array(".$ary['dt'].",".$ary['number']."); 
} 
-1

首先創建一個新的JavaScript數組。我相信互聯網上有很多解決方案。

基本上ü只需要使用for循環來acheive它

我已經GOOGLE了它。 There

-3

有這樣做的許多方面:

1

我真的不喜歡內置PHP的想法。我們現在不會內嵌JavaScript或CSS,因爲這是不好的做法,即難以維護。我們感謝分離關注。如果您需要將數據從您的應用程序(PHP或其他)傳遞到客戶端的JavaScript變量,那麼您可以使用兩種好的機制。可以通過AJAX將結果作爲JSON獲取,或者僅將中客戶端的變量渲染爲單個可訪問位置

您的模板引擎應該能夠真正能夠在頁面上爲您註冊數據。你實質上是在渲染一個腳本,所以你的腳本包含機制應該爲註冊php變量提供一個可選的參數。如果你沒有使用模板引擎,只需要注入這些變量,我想可以接受的做一些事情。

<script type="text/javascript"> 
    var phpdata = <?php echo json_encode($phpdata)?> 
</script> 

請注意,這是聲明一個全局。鼓勵我們不惜一切代價避免使用全局變量,但我認爲在明智選擇時這是一個有效的用例,例如,如果您在全局範圍內將自己的對象註冊爲敏感的名稱空間,則引用namespace.phpdata。或者,您只需將您的JavaScript封裝在即時函數調用中,並將該變量聲明在本地範圍內。

function() { 
    var phpdata = <?php echo json_encode($phpdata)?> 

    ... 
}(); 

但就像我說的,在我看來,我認爲這是更好地得到您的模板引擎來處理它,所以你通過,你需要爲每一個JavaScript的包括PHP數據,並從產生一個單一的PHP數據對象這些數據幷包含在您的頁面中。

相關問題