2013-07-20 5 views
0

Я хотел бы подсчитать дублированный order_id в массиве и в зависимости от результата print rowspan на ячейке таблицы. Я не уверен, как достичь этого с помощью php, любая помощь приветствуется.table table rowspan PHP

У меня есть PHP массив как это:

Array (
[0] => Array 
    (
     [order_id] => 1374282003 
     [status] => 1 
     [mark] => Casio 
     [model] => W-81 
     [price] => 10.00 
    ) 

[1] => Array 
    (
     [order_id] => 1374282003 
     [status] => 1 
     [mark] => Casio 
     [model] => W-81 
     [price] => 10.00 
    ) 

[2] => Array 
    (
     [order_id] => 1374282573 
     [status] => 1 
     [mark] => Casio 
     [model] => W-81 
     [price] => 10.00 
    ) 

[3] => Array 
    (
     [order_id] => 1374282573 
     [status] => 1 
     [mark] => Casio 
     [model] => W-81 
     [price] => 10.00 
    ) 

[4] => Array 
    (
     [order_id] => 1374282573 
     [status] => 1 
     [mark] => Casio 
     [model] => W-81 
     [price] => 10.00 
    ) 

)

Я хотел бы использовать RowSpan на ячейку таблицы, как этот

<table> 
<tr> 
<td>Order</td> 
<td>Product</td> 
<td>Price</td> 
<td>Status</td> 
</tr> 
<tr> 
    <td rowspan="2">1374282003</td> 
    <td>Casio</td> 
    <td>10</td> 
    <td>1</td> 
</tr> 
<tr> 
    <td>Casio</td> 
    <td>10</td> 
    <td>1</td> 
</tr> 
<tr> 
<td rowspan="3">1374282573</td> 
    <td>Casio</td> 
    <td>10</td> 
    <td>1</td> 
</tr> 
<tr> 
    <td>Casio</td> 
    <td>10</td> 
    <td>1</td> 
</tr> 
<tr> 
    <td>Casio</td> 
    <td>10</td> 
    <td>1</td> 
</tr> 
</table> 

Это код массива зацикливание

<?php 
$rowspan = array_count_values(array_map(function($item) { return $item['order_id']; }, $result)); 
foreach($result as $row) { 
?> 
<tr> 
    <td rowspan="<?php echo $rowspan[$row['order_id']]"><?php echo $row['order_id']; ?></td> 
    <td><?php echo $row['mark']. " " .$row['model']; ?></td> 
    <td>1</td> 
    <td><?php echo number_format($row['price'], 2, '.', ','); ?> kuna</td> 
    <td><?php echo $row['status']; ?></td> 
</tr> 
<?php } ?> 
+0

извините, я обновил первый пост с кодом цикла. – user2499170

ответ

0

попробовать это в цикле используется для заполнения табличных данных с:

if(in_array($item['order_id'], $tempArray)) 
{ 
    $rowspan += count($tempArray); 
} 
$tempArray[] = $item['order_id']; 
+0

Это будет считать, сколько строк мне нужно. Но в моем коде это делается с помощью array_count_values ​​ – user2499170

+0

Попробуйте использовать ' ';}?> ' – verbumSapienti

0
<?php 
$rowspan = array_count_values(array_map(function($item) { return $item['order_id']; }, $result)); 
foreach($result as $row) { 
?> 
<tr> 
    <td rowspan="<?php echo $rowspan[$row['order_id']]"><?php echo $row['order_id']; ?></td> 
    <td><?php echo $row['mark']. " " .$row['model']; ?></td> 
    <td>1</td> 
    <td><?php echo number_format($row['price'], 2, '.', ','); ?> kuna</td> 
    <td><?php echo $row['status']; ?></td> 
</tr> 
<?php } ?> 

Хорошо, здесь, у вас есть некоторые PHP, а затем это окружающим некоторые HTML, а затем это в какой-то PHP, и и и. В конце концов, это сойдет с ума.

Начните с сокращения ваших тегов PHP до одного или двух файлов. Это просто не предназначено для обработки строк, перепрыгивая из PHP-движка. Так переключиться на что-то вроде этого:

<?php 
$rowspan = array_count_values(array_map(function($item) { return $item['order_id']; }, $result)); 
foreach($result as $row){ 
    echo "<tr>\n"; 
    echo "<td rowspan=" . $rowspan[$row['order_id']] .$row['order_id'] ."></td>\n" ; 
    echo "<td><" .$row['mark']. " " .$row['model'] . "></td>\n"; 
    echo "<td>1</td>"; 
    echo "<td>" . $row['order_id']. "</td>"; 
    echo "<td><" . number_format($row['price'], 2, '.', ',') . "> kuna</td>\n"; 
    echo "<td><" .$row['status'] ."></td>\n"; 
    echo "</tr>\n"; 
    } 
?> 
0
<?php 

$results = [ 
0 => [ 
     'order_id'=> '1374282003', 
     'status'=> 1, 
     'mark'=> 'Casio', 
     'model'=> 'W-81', 
     'price'=> 10.00, 
    ], 
1=> [ 
     'order_id'=> '1374282003', 
     'status'=> 1, 
     'mark'=> 'Casio', 
     'model'=> 'W-81', 
     'price'=> 10.00, 
    ], 
2=> [ 
     'order_id'=> '1374282573', 
     'status'=> 1, 
     'mark'=> 'Casio', 
     'model'=> 'W-81', 
     'price'=> '10.00', 
    ], 
3=> [ 
     'order_id'=> '1374282573', 
     'status'=> 1, 
     'mark'=> 'Casio', 
     'model'=> 'W-81', 
     'price'=> 10.00, 
    ], 
4=> [ 
     'order_id'=> '1374282573', 
     'status'=> 1, 
     'mark'=> 'Casio', 
     'model'=> 'W-81', 
     'price'=> 10.00, 
    ], 
]; 

$pedidos = []; 

foreach($results as $key =>$pedido){ 
    $pedidos[$pedido['order_id']][] = $pedido; 
    $count = count($pedidos[$pedido['order_id']]); 
    $pedidos[$pedido['order_id']][0]['rowspan'] = $count; 
} 
?> 

<table border="1"> 
<tr> 
    <th>Order id</th> 
    <th>Produto</th> 
    <th>valor</th> 
    <th>Status</tr> 
</tr> 
<?php 
    foreach($pedidos as $pedido) { 
     foreach($pedido as $row){ 
?> 
<tr> 
<?php 
    if(isset($row['rowspan']) && $row['rowspan']>1){ 
      echo '<td rowspan=" ' . $row['rowspan'] .'">'.$row['order_id'].'</td>';  
    } 
    if(isset($row['rowspan']) && $row['rowspan'] === 1){ 
      echo '<td>'.$row['order_id'].'</td>';  
     } 
    ?> 
    <td><?php echo $row['mark']. " " .$row['model']; ?></td> 
    <td>1</td> 
    <td><?php echo number_format($row['price'], 2, '.', ','); ?> </td> 
    <td><?php echo $row['status']; ?></td> 
</tr> 
<?php } 
     } ?> 
</table>