2013-07-31 4 views
0

В основном у меня есть файл csv с информацией о заказе на нем, заказанный с веб-сайта, содержащий номер счета, имя, адрес и т. Д. Я использовал PHP, чтобы превратить это в счета-фактуры. Это выглядит неплохо, но я полностью застрял на одном.объединить строки из массивов fgetcsv

Вот бит открытия, используя fgetcsv;

<?PHP 
$file_handle = fopen("orders.csv", "r"); 
while (!feof($file_handle)) { 
$csvline = fgetcsv($file_handle, 1024); 
?> 

В файле CSV, если кто-то заказал более чем один элемент появляется на новой строке с тем же номером счета-фактуры в строке раньше, но не показывает какого-либо продукта в первой строке счета-фактуры номер:

100001,Bradley Manning,[email protected],Address,Product A, 
100002,Mr Snowden,[email protected],Address,Product A, 
100003,Dr Dre,[email protected],Address,,, 
100003,,,,,,,,,,"Product A", 
100003,,,,,,,,,,"Product B", 
100003,,,,,,,,,"Product C", 

РНР принимает эти значения (например, $ csvline [0] для номера счета-фактуры.) и помещает их в хорошей печати HTML-файл. Но мне нужно иметь возможность получать строки, начинающиеся с того же номера счета, на одну и ту же таблицу html (в ячейке ниже первого заказанного продукта).

Любые предложения по моей довольно ужасно сформулированной проблеме будут очень оценены!

Ps. Вот PHP/HTML фрагмент:

<?php 
$exvat = ($csvline[15]/1.2); 
$exvatrounded = number_format($exvat, 2, '.', ''); 
?> 
<div class="t2 th">Description</div> 
<div class="t3 th">Unit Price</div> 
<div class="t4 th">Quantity</div> 
<div class="t5 th">VAT Rate</div> 
<div class="t6 th">Amount</div> 
<div class="even"> 
<div class="t2 td"><?php echo $csvline[12]; ?></div> 
<div class="t3 td">&pound;<?php echo $exvatrounded; ?></div> 
<div class="t4 td"><?php echo $csvline[14]; ?></div> 
<div class="t5 td"><?php echo $csvline[16]; ?></div> 
<div class="t6 td">&pound;<?php echo $csvline[20]; ?></div> 
</div> 
<div class="odd"> 
<div class="t2 td">MORE PRODUCT LINES??????????????????</div> 
<div class="t3 td">&pound;AMOUNT</div> 
<div class="t4 td">QUANTITY</div> 
<div class="t5 td">VAT</div> 
<div class="t6 td">&pound;TOTAL AMOUNT</div> 

ответ

1

ВНИМАНИЕ Ваш CSV не нормируется - так заставить его работать будет практически невозможно с текущей раскладке CSV.

Используйте номер счета-фактуры в качестве key к array, затем через петлю array в вашем выходе ..

$file_handle = fopen("orders.csv", "r"); 
$orders = array(); 
while (!feof($file_handle)) { 
    $csvline = fgetcsv($file_handle, 1024); 
    $orders[$csvline[0]][] = $csvline; 
} 
//print_r($orders); 

Создает массив:

Array 
(
    [100001] => Array 
     (
      [0] => Array 
       (
        [0] => 100001 
        [1] => Bradley Manning 
        [2] => [email protected] 
        [3] => Address 
        [4] => Product A 
        [5] => 
       ) 

     ) 

    [100002] => Array 
     (
      [0] => Array 
       (
        [0] => 100002 
        [1] => Mr Snowden 
        [2] => [email protected] 
        [3] => Address 
        [4] => Product A 
        [5] => 
       ) 

     ) 

    [100003] => Array 
     (
      [0] => Array 
       (
        [0] => 100003 
        [1] => Dr Dre 
        [2] => [email protected] 
        [3] => Address 
        [4] => 
        [5] => 
        [6] => 
       ) 

      [1] => Array 
       (
        [0] => 100003 
        [1] => 
        [2] => 
        [3] => 
        [4] => Product A 
        [5] => 
       ) 

      [2] => Array 
       (
        [0] => 100003 
        [1] => 
        [2] => 
        [3] => 
        [4] => Product B 
        [5] => 
       ) 

      [3] => Array 
       (
        [0] => 100003 
        [1] => 
        [2] => 
        [3] => 
        [4] => Product C 
        [5] => 
       ) 

     ) 

) 

Используя этот CSV (нормированный)

100001,Bradley Manning,[email protected],Address,Product A, 
100002,Mr Snowden,[email protected],Address,Product A, 
100003,Dr Dre,[email protected],Address,,, 
100003,,,,"Product A", 
100003,,,,"Product B", 
100003,,,,"Product C", 

Кроме того, я бы рекомендовал нам ING tables для табличных данных вместо divs

Чтобы использовать это в вашем HTML

<?php foreach($orders as $order_id => $products) { ?> 
    <div class="t2 th">Description</div> 
    <div class="t3 th">Unit Price</div> 
    <div class="t4 th">Quantity</div> 
    <div class="t5 th">VAT Rate</div> 
    <div class="t6 th">Amount</div> 
    <?php foreach($products as $product) { ?> 
    <div class="even"> 
     <div class="t2 td"><?php echo $product[4] ?></div> 
     <div class="t3 td">&pound;</div> 
     <div class="t4 td"></div> 
     <div class="t5 td"></div> 
     <div class="t6 td"></div> 
    </div> 
    <?php } ?> 
<?php } ?> 
+0

Отлично, спасибо! Еще одна вещь (совершенно новая для всего этого!), Как я мог бы использовать ее в php/html? –

+0

обновленный ответ с примером – user20232359723568423357842364