【问题标题】:Adding php loop data to js array将php循环数据添加到js数组
【发布时间】:2013-07-25 04:37:15
【问题描述】:

我有一个循环遍历产品及其数据的 php 循环:

<?php foreach ($this->products as $product) { ?>

<script type=text/javascript>
product = {
    id:   $product->virtuemart_product_id,
    name: $product->product_name
};
</script>

<?php } ?>

数据包含有关 $product 的产品信息,如下所示:

  • $product->virtuemart_product_id
  • $product->product_name

是否可以在每个循环中将数据添加到现有的 javascript 数组或对象中? 基本上它将循环的数据添加到javascript数组或产品中。

任何帮助将不胜感激:)

【问题讨论】:

    标签: php javascript arrays foreach javascript-objects


    【解决方案1】:

    还有更好更干净的方式,使用json_encode
    PHP

    <?php
      $data = array();
      foreach( $this->products as $product ) {
        $data[] = array(
          "id"    =>  $product->virtuemart_product_id,
          "name"  =>  $product->product_name
        );
      }
    ?>
    

    HTML

    <script type=text/javascript>
      var product = <?php echo json_encode( $data ) ?>;
    </script>
    

    你也可以使用

    var product = <?php echo json_encode( $product ) ?>;
    

    所以当你想用javascript访问product时,你的代码将是

    <script type="text/javascript">
      for( i in product ) {
        console.log( product[i] );
      }
    </script>
    

    【讨论】:

      【解决方案2】:

      你可以通过php函数json_encode来使用json:

      <script type='text/javascript'>
      <?php
          $products = $this->products;
          $js_array = json_encode($products);
          echo "var products = ". $js_array . ";\n";
      ?>
      </script>
      

      做同样事情的另一种方法:

      <script type="text/javascript">
          var products= <?php echo json_encode($products); ?>;
          for(var i=0;i<n;i++)
          {
              alert(products[i]);
          }
      </script>
      

      【讨论】:

        【解决方案3】:

        你的意思是这样的?:

        <script type=text/javascript>
          var x, productArray = [];
        <?php foreach ($this->products as $product) { ?>
        
          x = {
              id:   <?php print $product->virtuemart_product_id; ?>,
              name: <?php print $product->product_name; ?>
          };
        
          productArray.push(x);
        
        <?php } ?>
        </script>
        

        【讨论】:

          【解决方案4】:

          那又怎样:

          <script type=text/javascript>
          var products= array();
          <?php foreach ($this->products as $product) { 
           echo "product.push({
                      id:   $product->virtuemart_product_id,
                      name: $product->product_name
                  });" ;
          ?>
          </script>
          

          【讨论】:

            【解决方案5】:

            不要在循环中使用脚本标记,而是为每个产品构建一个包含 id/name 的 PHP 数组,然后在循环之外,在其上使用 json_encode()。然后将其提供给您的 JavaScript。

            【讨论】:

              【解决方案6】:

              使用.push(),您可以像这样将元素附加到数组:

              var products = [{
                  name: 'Product 1',
                  id: 1
              }, {
                  name: 'Product 2',
                  id: 2
              }]
              

              所以,如果您想从循环中将元素附加到 products 数组:

              products.push({
                  id:    <?php echo $product->product_id; ?>,
                  name: '<?php echo $product->product_name; ?>'
              });
              

              【讨论】:

                【解决方案7】:

                我的解决方案:

                <?php foreach ($this->products as $product) { ?>
                    <script type=text/javascript>
                        product = {
                           id:   <?=json_encode($product->virtuemart_product_id)?>,
                           name: <?=json_encode($product->product_name)?>
                        };
                    </script>
                <?php } ?>
                

                【讨论】:

                  猜你喜欢
                  • 2020-08-24
                  • 1970-01-01
                  • 2019-04-03
                  • 1970-01-01
                  • 2020-10-22
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-08-19
                  相关资源
                  最近更新 更多