我有array data
这样从.js到JSON,然后是PHP
Ok: Array
(
[MyData] => Array
(
[0] => Product 1
[1] => Attr 1
[2] => Quantity 1
[3] => Price 1
[4] => Product 2
[5] => Attr 2
[6] => Quantity 2
[7] => Price 2
[8] => Product 3
[9] => Attr 3
[10] => Quantity 3
[11] => Price 3
[12] => Product 4
[13] => Attr 4
[14] => Quantity 4
[15] => Price 4
[16] => Product 5
[17] => Attr 5
[18] => Quantity 5
[19] => Price 5
)
)
在PHP中,我有类似的东西
$data = $_POST['MyData'];
MyData数据是通过$ data [0]得到的.... [39]电子邮件模板等变量 像这里:
$message = '<!DOCTYPE HTML>'.
(...)
'<table cellpadding="15">'.
'<tr style="background-color: #ffffff;">'.
'<td><p>'.$data[0].'</p></td>'.
'<td><p>'.$data[1].'</p></td>'.
'<td><p>'.$data[2].'</p></td>'.
'<td><p>'.$data[3].'</p></td>'.
'</tr>'.
'<tr style="background-color: #ffffff;">'.
'<td><p>'.$data[4].'</p></td>'.
'<td><p>'.$data[5].'</p></td>'.
'<td><p>'.$data[6].'</p></td>'.
'<td><p>'.$data[7].'</p></td>'.
'</tr>'.
'</table>'.
(...)
;
如何使循环(foreach
?)处理此表tr行生成?
存在的问题是因为数组有时只有1个产品(Array 0 to 3
),有时候可能有40个产品...你宁愿知道问题出在哪里 - 我不想做,大HTML/PHP
具有数百个数组值id的电子邮件模板;)
我正在学习js, JSON, ajax and PHP
所以请耐心等待我的新手问题。
答案 0 :(得分:2)
您可以尝试以下方式:
$i = 0;
$output = '<table cellpadding="15">'.
'<tr style="background-color: #ffffff;">'.;
foreach($data as $row)
{
if($i % 4 === 0)
{
$output .= '</tr>'.
'<tr style="background-color: #ffffff;">';
}
$output .= '<td><p>'.$row.'</p></td>';
$i++;
}
$output .= '</tr>'.
'</table>';
答案 1 :(得分:1)
即使我很喜欢Marco Man的回答,我建议从
重建数组 [0] => Product 1
[1] => Attr 1
[2] => Quantity 1
[3] => Price 1
[4] => Product 2
[5] => Attr 2
[6] => Quantity 2
[7] => Price 2
[8] => Product 3
[9] => Attr 3
[10] => Quantity 3
[11] => Price 3
[12] => Product 4
[13] => Attr 4
[14] => Quantity 4
[15] => Price 4
[16] => Product 5
[17] => Attr 5
[18] => Quantity 5
[19] => Price 5
到
[0] => Product 1
[0] => Attr 1
[1] => Quantity 1
[2] => Price 1
[1] => Product 2
[0] => Attr 2
[1] => Quantity 2
[2] => Price 2
[2] => Product 3
[0] => Attr 3
[1] => Quantity 3
[2] => Price 3
[3] => Product 4
[0] => Attr 4
[1] => Quantity 4
[2] => Price 4
[4] => Product 5
[0] => Attr 5
[1] => Quantity 5
[2] => Price 5
它不仅可以解决您的问题,还可以让您更轻松地处理不同产品的相同数据。根据我的经验,我总是会对总价和其他事情进行一些计算。此外,如果你做一些像resort()函数这样的事情,你可以在任何其他地方使用它作为一个班轮。
更新#1 顺便说一句,这种求助方式可以通过简单的方式完成(比foreach更快)
我去了
function resort($arr, $countOfElementsPerProduct) {
$ret = array();
for($i = 0; $i < count($arr); $i++) {
if($i % $countOfElementsPerProduct == 0) {
if(count($product)) {
$ret[] = $product;
}
$product = array();
} else {
$product[] = $arr[$i];
}
}
return $ret;
}
更新#2 在你的情况下,我会选择这样的事情:
$('.ok').on('click', function(e){
var selectedProducts = [];
var productsVars = [];
});
$("#table tr.selected").each(function(){
productsVars.push($('td:nth-child(5)', this).html()); //adding attributes in productVars
productsVars.push($('td:nth-child(6)', this).html());
productsVars.push($('td:nth-child(8)', this).html());
productsVars.push($('td:nth-child(10)', this).html());
selectedProducts.push(productsVars); //variables for each product, separately
productsVars = []; //empty your variables for next product
});
var myJsonData=selectedProducts;
$.ajax({data:{MyData:myJsonData}});
答案 2 :(得分:0)
如果在PHP中的变量中包含值数组,则Foreach将如下所示:
<table>
<thead>
<th>S.No</th>
<th>Name</th>
</thead>
<tbody>
<?php
$data = $_POST['MyData'];
$i=1;// Auto Increment
foreach($data as $single_value)
{
?>
<tr>
<td><?php echo $i; ?></td>
<td><?php echo $single_value; // This will display the value ?></td>
</tr>
<?php
$i++;
}
?>
</tbody>
</table>
在foreach中,<tr>
将重复,直到数组中有多少值。