1

I would like to display a 2 dimension array. I tried to use a double foreach to make it but im a bit lost. It return's me an empty td and i dont know why. Im using ZendFramework. Should i use an other solution and leave the foreach solution or i just miss something ?

The array ( there is 7 arrays inside one array and the columns are always the same ) :

array(7) {
[0]=>
array(11) {
["'01.drplapostej-1'"]=>
string(20) "01. DRP La poste J-1"
["import"]=>
string(1) "0"
["radm_ok"]=>
string(1) "0"
["radm_rejet"]=>
string(1) "0"
["radm_ko"]=>
string(1) "0"
["rpec_ok"]=>
string(1) "0"
["rpec_rejet"]=>
string(1) "0"
["rpec_ko"]=>
string(1) "0"
["factu_ok"]=>
string(1) "0"
["factu_rejet"]=>
string(1) "0"
["factu_ko"]=>
string(1) "0"
}
[1]=>
array(11) {
["'01.drplapostej-1'"]=>
string(20) "02. DRL La poste J-1"
["import"]=>
string(2) "80"
["radm_ok"]=>
string(1) "0"
["radm_rejet"]=>
string(1) "0"
["radm_ko"]=>
string(1) "0"
["rpec_ok"]=>
string(1) "0"
["rpec_rejet"]=>
string(1) "0"
["rpec_ko"]=>
string(1) "0"
["factu_ok"]=>
string(1) "0"
["factu_rejet"]=>
string(1) "0"
["factu_ko"]=>
string(1) "0"
}

What i tried to do :

<table>
<tr>
<th>01.DRPLAPOSTEJ-1</th>
<th>IMPORT</th> 
<th>RADM_OK</th>
<th>RADM_REJET</th>
<th>RADM_KO</th>
<th>RPEC_OK</th>
<th>RPEC_REJET</th>
<th>RPEC_KO</th>
<th>FACTU_OK</th>
<th>FACTU_REJET</th>
<th>FACTU_KO</th>
</tr>
<?php foreach ($this->suiviprodjours as $value): ?>
  <?php foreach ($value as $key => $val): ?>
<tr>
<td <?php echo $val[$key]["01.DRPLAPOSTEJ-1"].'<br>';  ?></td>
</tr>
<?php endforeach; ?>
<?php endforeach; ?>
</table>

The result :

enter image description here

1
  • There may be something odd in the way you generate the source array as you have quotes round the first key (["'01.drplapostej-1'"]). This doesn't affect a foreach() but just looks odd. Commented Jun 27, 2019 at 13:34

2 Answers 2

2

You need to apply foreach() like below:-

<?php foreach($array as $arr){?>
    <tr>
        <?php foreach($arr as $value){?>
            <td><?php echo $value;?></td>
        <?php } ?>
    </tr>
<?php } ?>

So full code will be:

<table>
    <tr>
        <th>01.DRPLAPOSTEJ-1</th>
        <th>IMPORT</th> 
        <th>RADM_OK</th>
        <th>RADM_REJET</th>
        <th>RADM_KO</th>
        <th>RPEC_OK</th>
        <th>RPEC_REJET</th>
        <th>RPEC_KO</th>
        <th>FACTU_OK</th>
        <th>FACTU_REJET</th>
        <th>FACTU_KO</th>
    </tr>
    <?php foreach($array as $arr){?>
        <tr>
            <?php foreach($arr as $value){?>
                <td><?php echo $value;?></td>
            <?php } ?>
        </tr>
    <?php } ?>
</table>
Sign up to request clarification or add additional context in comments.

Comments

2

You can use this snippet for dynamic header and data,

echo "<table>";
$keys = array_keys($arr[0]);
//if you want to make upper cases
$keys = array_map("strtoupper", $keys);
echo "<tr><th>";
echo implode("</th><th>", $keys);
echo "</th></tr>";
foreach ($arr as $key => $value) {
    echo "<tr><td>";
    echo implode("</td><td>", $value);
    echo "</td></tr>";
}
echo "</table>";

Demo.

1 Comment

@NicoBoulein I updated my answer, with the demo. Please check. A single loop will be enough

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.