2013-09-26 53 views
-1

我在Javascript中使用了一個包含數據塊列表的數組。這個數組可能會改變他的長度。我必須從PHP訪問它,因爲我必須在數據庫中執行一些操作。問題是這個數組的長度可能會改變。這是代碼:使用PHP中的javascript數組進行迭代

<html> 
<head> 
</head> 
<body> 
<script type='text/javascript'> 
    var blocks = [ 
    { w: 500, h: 600 }, 
    { w: 300, h: 200 }, 
    { w: 150, h: 150 }, 
    { w: 150, h: 150 }, 
    { w: 200, h: 250 }, 
    { w: 100, h: 250 } 
    ]; 

    order_blocks(blocks); //blocks are ordered and can be added new blocks 

    //Next code is only to test 
    for(var n = 0 ; n < blocks.length ; n++) { 
    var block = blocks[n]; 
    if (block.fit) { 
     var str1 = "Block " + (n+1) + ": (" + block.w + "," + block.h + ")"; 
     document.write(str1); 
    } 
    } 
</script> 
<?php 
    if (!isset($_POST[numblocks])) 
    { 
     echo '<form action="'.$_SERVER[PHP_SELF].'" method=post name=pass> 
        <input type=hidden name=numblocks> 
        <input type=hidden name=block1_w> 
        <input type=hidden name=block1_h> 
      </form>'; 
     echo '<script languaje="JavaScript"> 
        document.pass.numblocks.value=blocks.length; 
        document.pass.block1_w.value=blocks[0].w; 
        document.pass.block1_h.value=blocks[0].h; 
        document.pass.submit(); 
      </script>'; 
    }  
    echo '<br><br>There are '.$_POST["numblocks"].' Blocks<br>'; 
    echo 'Block 1 ('.$_POST["block1_w"].','.$_POST["block1_h"].')<br>'; 
?> 
</body> 
</html> 

的過程是:

  1. 的Javascript:我創建陣列塊和應用order_blocks。
  2. PHP:我通過POST方法傳遞Javascript變量。

在代碼中你可以看到我正確地傳遞了數組的第一個元素,但是我應該在數組上迭代它。

+0

我看不到任何PHP代碼(至少嘗試) 「在陣列上迭代。」 – djot

+0

正確djot。我不知道如何遍歷php塊中的數組。對不起,如果我沒有表達好。 – TuLKaRiS

+0

我可以幫助你嗎? http://php.net/manual/en/control-structures.foreach.php – djot

回答

0

替換此:

echo '<form action="'.$_SERVER[PHP_SELF].'" method=post name=pass> 
       <input type=hidden name=numblocks> 
       <input type=hidden name=block1_w> 
       <input type=hidden name=block1_h> 
     </form>'; 
echo '<script languaje="JavaScript"> 
       document.pass.numblocks.value=blocks.length; 
       document.pass.block1_w.value=blocks[0].w; 
       document.pass.block1_h.value=blocks[0].h; 
       document.pass.submit(); 
     </script>'; 

本(應該工作):

echo '<form action="'.$_SERVER[PHP_SELF].'" method=post name=pass> 
       <input type=hidden name="numblocks"> 
       <input type=hidden name="block1_w[]"> 
       <input type=hidden name="block1_h[]"> 
     </form>'; 
echo '<script language="text/javascript"> 
      for(var i = 0; i < blocks.length; i++) { 
       document.pass.numblocks.value=blocks.length; 
       document.pass.block1_w[i].value=blocks[i].w; 
       document.pass.block1_h[i].value=blocks[i].h; 

      } 
     </script>'; 
+0

感謝mansoulx,但它不讓我做出assigment document.pass.block1_w [i] .value = blocks [i] .w; – TuLKaRiS