【问题标题】: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 } ?>