将php循环数据添加到js数组中

Adding php loop data to js array

本文关键字:js 数组 添加 php 循环 数据      更新时间:2023-09-26

我有一个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->virtualmart_product_id
  • $product->product_name

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

如有任何帮助,我们将不胜感激:)

有一种更好、更干净的方法,使用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>

您可以使用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>

你的意思是这样的?:

<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>

那呢:

<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>

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

使用.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; ?>'
});

我的解决方案:

<?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 } ?>