tpederson
tpederson

Reputation: 526

Turning a multidimensional array into a table

I'm having a difficult time getting my head around this logic. (I've completely rewritten the data because its a work thing. But, the structure is the same.)

I have a text file that looks like this:

Ace
Hammer  12
Nails   4
Screwdriver  9

Home Depot
Nails 3
Screwdriver 11
Sawzall 43

Lowes
Hammer  10
Nails 5
Sawzall 42
Sledge  14

So there are stores that have items and items that have prices. I was able to pull it into an array that looks like this:

array(3) {
  ["Ace"]=>
  array(3) {
    [0]=>
    array(2) {
      [0]=>
      string(5) "Hammer"
      [1]=>
      string(1) "12"
    }
    [1]=>
    array(2) {
      [0]=>
      string(5) "Nails"
      [1]=>
      string(1) "4"
    }
    [2]=>
    array(2) {
      [0]=>
      string(5) "Screwdriver"
      [1]=>
      string(1) "9"
    }

I would like to format the data in an HTML table that looks like this:

                Ace     Home Depot      Lowes

Hammer          12          x               10
Nails           4           3               5
Screwdriver     9           11              x
Sawzall         x           43              42
Sledge          x           x               14

Since there are going to be different items for each store I figured I'd have to create an array of items and run it through array_unique. After that, it kind of falls apart. I've been trying various levels of nested loops, but I haven't been able to make anything work. I would appreciate any help getting this code written.

Upvotes: 0

Views: 90

Answers (1)

DaOgre
DaOgre

Reputation: 2100

You have to break this down into smaller pieces. Like njk mentions in his comment you'll want to start by handling the table headers, which you can just write manually. Then all you're doing is the following code:

 <td>Hammer</td>
 <td>12</td>
 <td>x</td>
 <td>10</td>

Then the same thing, across the horizontal axis. As such, you should be able to write a function which takes 2 inputs, the first being the text of the first column, and then an array which is parsed out for the next columns, so something like

 function parseArray($item, $array)
 {
      print '<tr>';
      print '<td>' . $item . '</td>';
      foreach($array as $item)
      {
           print '<td>' . $item . '</td>';
      }
      print '</tr>';
 }

You can then recursively call parseArray as you iterate through your initial loop.

Upvotes: 1

Related Questions