如何使用给定的数组数据进行foreach循环

时间:2016-08-31 10:16:56

标签: php arrays foreach

我有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所以请耐心等待我的新手问题。

3 个答案:

答案 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>将重复,直到数组中有多少值。