3

Array starts like this:

Array ( 
  [SMART Board] => Array ( [0] => sb1 [1] => sb2 [2] => sb3 ) 
  [Projector] => Array ( [0] => pr1 [1] => pr2 [2] => pr3 ) 
  [Speakers] => Array ( [0] => sp1 [1] => sp2 [2] => sp3 ) 
  [Splitter] => Array ( [0] => spl1 [1] => spl2 [2] => spl3 ) 
  [Wireless Slate] => Array ( [0] => ws1 [1] => ws2 [2] => ws3 ) 
)

The keys are used as my table columns titles. Their individual arrays are to carry the column information.

I have split it up even further with array_slice and array_merge_recursive to look pretty as 2 arrays - 1 holds the column names, the other looks like this:

Array ( 
  [0] => sb1  
  [1] => sb2  
  [2] => sb3  
  [3] => pr1  
  [4] => pr2  
  [5] => pr3  
  [6] => sp1  
  [7] => sp2  
  [8] => sp3  
  [9] => spl1  
  [10] => spl2  
  [11] => spl3  
  [12] => ws1  
  [13] => ws2  
  [14] => ws3  
)

However, when trying to write the table I'm getting keys 0, 1, 2 as the column data, then row break then 3, 4, 5 then row break... etc.

I need it to be 0, 3, 6, 9, 12 row break 1, 4, 7, 10, 13 row break etc...

How can I either rearrange my array to allow for this, or rewrite how the data goes into the table so that the correct information lines up with the appropriate column?

foreach(unserialize($dl->data) as $data){

    //first 3 are specialinstructions, system, and room
    $uniques = array_slice($data,0,3);

    $rows = array_slice($data,3);
    $rows2 = array_merge_recursive($rows2, $rows);

    //get the specialinstructions, system, and room
    foreach($uniques as $unique){
        echo $unique."<br/>";
    }///foreach uniques

    echo "<br>";

}///foreach unserialized

$numberofrooms = count($rows2[key($rows2)]);
$numberofproducts = count($rows2);
print_r($rows2);

unset($rows);

//write the individual rows
foreach($rows2 as $header=>$rowset){

    $headers[] = $header;

    foreach($rowset as $row){

        $rows[] = $row;

    }//foreach rowset

}//foreach rows2

echo "<p>";
print_r($rows);

echo '<table class="data-table">
          <caption>DL</caption>

          <thead><tr>';
foreach($headers as $header){
    echo "<th>".$header."</th>";
}
echo '</tr></thead>';
echo '<tbody>';
$i = 0;
foreach($rows as $row){
    if($i == 3 || $i == 0){
        echo "<tr>";
        $i = 1;
    }
    echo '<td>'.$row.'</td>';
    if($i == 2){
        echo "</tr>";
    }
    $i++;
}
echo '</tbody></table>';
2
  • As a hint: Imo it is much easier to grasp the structure of the code if you don't echo the HTML. Do it this way, e.g.: <?php foreach($headers as $header):?> <th><?php echo $header ?></th> <?php endforeach; ?> Commented Apr 6, 2010 at 13:14
  • Thanks Felix, I normally go with that. However this is wrapped up in a function and I feel it's cleaner to see exactly what I'm outputting. Commented Apr 6, 2010 at 13:18

1 Answer 1

1

You could use the original array and the following code to display the way you want:

$i=0;
while($i<3){ // 3 is the number of items in each array
    foreach($originalArray as $arr){
        print($arr[$i].'<br/>');
    }
    print('<hr/>');
    $i++;
}

Not tested but you should get the drift.

Sign up to request clarification or add additional context in comments.

1 Comment

Perfect! A little modification to fit my script and bingo, we have a winner. Thanks so much zaf! <?php $i=0; while($i < $numberofrooms){ // 3 is the number of items in each array echo "<tr>"; $j = 0; while($j < $numberofproducts){ echo "<td>".$rows[$numberofrooms*$j+$i].'</td>'; $j++; } $i++; } ?> (I have no idea how to do the php code in comments, my apologies)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.