nik1004
nik1004

Reputation: 337

Form table from PHP array

I met problem, that, I believe, you can help me with.

I have next array:

JSON:

{
"1":{
"01:00":"1",
"02:00":""
},
"2":{
"01:00":"3",
"02:00":""
},
"3":{
"01:00":"23",
"02:00":""
},
"4":{
"01:00":"234",
"02:00":""
},
"5":{
"01:00":"234",
"02:00":""
},
"6":{
"01:00":"",
"02:00":""
},
"7":{
"01:00":"",
"02:00":""
}
}

PHP:

array (
    1 => array ( '01:00' => '1', '02:00' => '', ),
    2 => array ( '01:00' => '3', '02:00' => '', ),
    3 => array ( '01:00' => '23', '02:00' => '', ),
    4 => array ( '01:00' => '234', '02:00' => '', ),
    5 => array ( '01:00' => '234', '02:00' => '', ),
    6 => array ( '01:00' => '', '02:00' => '', ),
    7 => array ( '01:00' => '', '02:00' => '', ),
)

I am trying to put right values to right places, but I am at dead end :(

Can you help me with the table generator for this array.

It should look like this with values in inputs: enter image description here

First line is quite static:

    echo "<table><tr>";
    for ($i = 0; $i < 8; $i++) {
        echo "<td>$days[$i]</td>";
    }
    echo "</tr>";

And then problems starts.

Upvotes: 0

Views: 704

Answers (3)

Mike
Mike

Reputation: 24393

What you could do is loop over the y and x axes of the table and pull the value from the array.

$array = array (
    1 => array ( '01:00' => '1', '02:00' => '', ),
    2 => array ( '01:00' => '3', '02:00' => '', ),
    3 => array ( '01:00' => '23', '02:00' => '', ),
    4 => array ( '01:00' => '234', '02:00' => '', ),
    5 => array ( '01:00' => '234', '02:00' => '', ),
    6 => array ( '01:00' => '', '02:00' => '', ),
    7 => array ( '01:00' => '', '02:00' => '', ),
);

echo "<table>\n";
for ($y = 0; $y < count(reset($array)); $y++) {
    echo "\t<tr>\n";
    for ($x = 0; $x <= count($array); $x++) {
        echo "\t\t<td>";
        if ($y == 0) {
            echo $x;
        }
        elseif (isset($array[$x])) {
            echo $array[$x]["0$y:00"];
        }
        else {
            echo "0$y:00";
        }
        echo "</td>\n";
    }
    echo "\t</tr>\n";
}
echo "\n</table>";

Here is the output:

<table>
    <tr>
        <td>0</td>
        <td>1</td>
        <td>2</td>
        <td>3</td>
        <td>4</td>
        <td>5</td>
        <td>6</td>
        <td>7</td>
    </tr>
    <tr>
        <td>01:00</td>
        <td>1</td>
        <td>3</td>
        <td>23</td>
        <td>234</td>
        <td>234</td>
        <td></td>
        <td></td>
    </tr>
    <tr>
        <td>02:00</td>
        <td></td>
        <td></td>
        <td></td>
        <td></td>
        <td></td>
        <td></td>
        <td></td>
    </tr>

</table>

Upvotes: 1

alamnaryab
alamnaryab

Reputation: 1484

try the following code

<?php
$days = array (
    1 => array ( '01:00' => '1', '02:00' => '', ),
    2 => array ( '01:00' => '3', '02:00' => '', ),
    3 => array ( '01:00' => '23', '02:00' => '', ),
    4 => array ( '01:00' => '234', '02:00' => '', ),
    5 => array ( '01:00' => '234', '02:00' => '', ),
    6 => array ( '01:00' => '', '02:00' => '', ),
    7 => array ( '01:00' => '', '02:00' => '', ),
);

echo "<table border='1'><thead><th>0</th>";

foreach($days as $k=>$v){   
    echo "<th>".$k."</th>"; 
}
echo "</thead><tbody>";

$rows = array_keys($days[1]);//edited

foreach($rows as $row){
    echo "<tr><td>".$row."</td>";
    foreach($days as $key=>$val){
        echo "<td>";
        echo "<input type='text' name='txt".$key."' value='".$days[$key][$row]."' style='width:40px;' />";//edited
        echo "</td>";
    }
    echo "</tr>";
}

echo "</tbody></table>";


?>

Upvotes: 2

I wrestled a bear once.
I wrestled a bear once.

Reputation: 23389

Remember, you've got an array of arrays. When you loop through the array, you then need to loop through the inner array.

Personally, I like while loops, and if you don't mind doing it in reverse, this example should help.

function makeTableFromArray($array){
    $array = array_values($array);
    $tbl = "<table>";
    $i = count($array);
    while($i--){
        $tbl .= "<tr>";
        $row = array_values($array[$i]);
        $n = count($row);
        while($n--){
            $tbl .= "<td>".$row[$n]."</td>";
        }
        $tbl .= "</tr>";
    }
    $tbl .= "</table>";
    return $tbl;
}

Here's an example: https://3v4l.org/L5Wfu

Edit if you don't like doing it in reverse, you can reverse the array first: makeTableFromArray(array_reverse($array));

Upvotes: 1

Related Questions