Hoe kan ik de gegevens uit deze array juist plaatsen in een tabel

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Snelle Jaap

Snelle Jaap

15/09/2020 13:05:31
Quote Anchor link
Ik heb de volgende array:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Array
(
    [2019] => Array
        (
            [Werkplek opgeruimd] => 6
            [Keuringsstickers op arbeidsmiddelen] => 1
            [Veilig gebruikte gereedschappen] => 2
            [Persoonlijke beschermingsmiddelen aanwezig, deugdelijk en juist] => 3
            [Veilige werkmethodes] => 3
        )

    [2020] => Array
        (
            [Veilig gebruikte gereedschappen] => 1
            [Persoonlijke beschermingsmiddelen aanwezig, deugdelijk en juist] => 2
            [Veilige werkmethodes] => 2
            [Werkplek opgeruimd] => 1
            [Materialen opslag veilig] => 1
        )

)


Hij is opgebouwd met het jaartal als key, daarin checklistvragen als key met als value het aantal afwijkingen (dit houd in situaties die niet OK waren).

Ik wil in een overzicht tonen hoeveel afwijkingen er waren per vraag, per jaar.

Op deze manier:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<table class="table table-hover">
   <thead>
      <tr>
         <th>Vraag</th>
         <th>2019</th>
         <th>2020</th>
      </tr>
   </thead>
   <tbody>
      <tr>
         <td>Werkplek opgeruimd</td>
         <td>6</td>
         <td>1</td>
      </tr>
      <tr>
         <td>Keuringstickers op arbeidsmiddelen</td>
         <td>1</td>
         <td>0</td>
      </tr>
   </tbody>
</table>


Etc

Hoe kan ik die gegevens op de juiste manier krijgen uit een loop? Alle vragen die een afwijking hebben moeten dus onder elkaar komen te staan (geen dubbele) met daarnaast per jaar hoeveel die afwijking voorkomt.
Gewijzigd op 15/09/2020 13:30:41 door Snelle Jaap
 
PHP hulp

PHP hulp

03/12/2020 08:15:11
 
- Ariën -
Beheerder

- Ariën -

15/09/2020 13:24:44
Quote Anchor link
Kijk eens naar de array_diff() functie.
 
Snelle Jaap

Snelle Jaap

15/09/2020 13:48:23
Quote Anchor link
- Ariën - op 15/09/2020 13:24:44:
Kijk eens naar de array_diff() functie.


Heb erover gelezen maar alsnog lastig de gewenste output te krijgen.

Met onderstaande output zou het makkelijk lukken:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Array
(
    [Werkplek opgeruimd] => Array
    (
        [2019] => 6
        [2020] => 1
    )

    [Persoonlijke beschermingsmiddelen aanwezig, deugdelijk en juist] => Array
    (
        [2019] => 3
        [2020] => 2
    )

    [Materialen opslag veilig] => Array
    (
        [2019] => 0
        [2020] => 1
    )
)

Etc.
Maar het is de vraag hoe ik bovenstaand zo kan krijgen vanuit deze array opmaak:


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Array
(
    [2019] => Array
        (
            [Werkplek opgeruimd] => 6
            [Keuringsstickers op arbeidsmiddelen] => 1
            [Veilig gebruikte gereedschappen] => 2
            [Persoonlijke beschermingsmiddelen aanwezig, deugdelijk en juist] => 3
            [Veilige werkmethodes] => 3
        )

    [2020] => Array
        (
            [Veilig gebruikte gereedschappen] => 1
            [Persoonlijke beschermingsmiddelen aanwezig, deugdelijk en juist] => 2
            [Veilige werkmethodes] => 2
            [Werkplek opgeruimd] => 1
            [Materialen opslag veilig] => 1
        )

)
 
Thomas van den Heuvel

Thomas van den Heuvel

15/09/2020 14:48:52
Quote Anchor link
Het enige wat je hoeft te doen is de rijen van het array omwisselen met de kolommen. Dit beschrijf je hierboven ook letterlijk. Dit lijkt mij niet zo'n moeilijke omzetting?
Gewijzigd op 15/09/2020 14:49:36 door Thomas van den Heuvel
 
- SanThe -

- SanThe -

15/09/2020 14:57:10
Quote Anchor link
Of je doet even ingewikkeld en je hebt precies wat je wilt.

Werkt ook als er een nieuw jaar bij komt.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
# error reporting
ini_set('display_errors', 1);
error_reporting(E_ALL);

$array = array(    2019 => Array(    'Werkplek opgeruimd' => 6,
                                'Keuringsstickers op arbeidsmiddelen' => 1,
                                'Veilig gebruikte gereedschappen' => 2,
                                'Persoonlijke beschermingsmiddelen aanwezig, deugdelijk en juist' => 3,
                                'Veilige werkmethodes' => 3
                            ),
                2020 => Array(    'Veilig gebruikte gereedschappen' => 1,
                                'Persoonlijke beschermingsmiddelen aanwezig, deugdelijk en juist' => 2,
                                'Veilige werkmethodes' => 2,
                                'Werkplek opgeruimd' => 1,
                                'Materialen opslag veilig' => 1
                            )
                );

                
$arrayyears = array();
$arraykeys = array();
foreach($array as $year => $value)
{
    $arrayyears[] = $year;
    foreach($value as $key => $v)
    {
    $arraykeys[] = $key;
    }
}

$arraykeys = array_unique($arraykeys);
?>


<table class="table table-hover">
   <thead>
      <tr>
         <th>Vraag</th>
<?php
    foreach($arrayyears as $year) echo '<th>'.$year.'</th>';
?>

      </tr>
   </thead>
   <tbody>
<?php
    foreach($arraykeys as $key)
    {
    echo '<tr><td>'.$key.'</td>';
        foreach($arrayyears as $year) echo '<td>'.@$array[$year][$key].'</td>';
        echo '</tr>';
    }

?>

   </tbody>
</table>
Gewijzigd op 15/09/2020 15:02:12 door - SanThe -
 
Rob Doemaarwat

Rob Doemaarwat

15/09/2020 19:05:09
Quote Anchor link
Volgens mij bedoel je meer dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php

$array
= [...]; //zie hierboven

$values = $diff = [];

foreach($array as $record) foreach($record as $key => $value){
  if(!array_key_exists($key,$values)){
    $values[$key] = $value; //referentie waarde
    $diff[$key] = false; //waarde wijkt niet of tov ref (duh)
  }
  elseif($value != $values[$key]) $diff[$key] = true; //afwijkende waarde
}

$keys = array_keys(array_filter($diff)); //voor deze keys wijkt de waarde af

print('<table><thead><tr><th>Vraag</th>');
foreach($keys as $key) print("<th>$key</th>");
print('</tr></thead><tbody>');

foreach($array as $year => $record){
  print("<tr><td>$year</td>");
  foreach($keys as $key) print("<td>{$record[$key]}</td>");
  print('</tr>');
}


print('</tbody></table>');

?>
 
- SanThe -

- SanThe -

15/09/2020 19:28:38
Quote Anchor link
@Rob Doemaarwat: Maar bij jou missen er enkele waarden.
 
Thomas van den Heuvel

Thomas van den Heuvel

15/09/2020 19:47:42
Quote Anchor link
Mja er missen enkele waarden voor bepaalde jaartallen (Keuringsstickers voor 2020 en Materialen opslag voor 2019).

Er zijn verschillende manieren om deze "gaten" nog op te vullen, maar het principe (rijen en kolommen verwisselen) blijft in grote lijnen hetzelfde.
 
Rob Doemaarwat

Rob Doemaarwat

15/09/2020 20:58:33
Quote Anchor link
O zo, het is ook de bedoeling dat keys die niet in het alle records zitten als "0" worden gezien (en dus ook hoogstwaarschijnlijk "niet gelijk"). Maar bij SanThe krijg je juist alle waarden, ook als ze in alle records gelijk zijn, en dat is volgens mij ook niet de bedoeling - het gaat om het aantal "afwijkingen" (?).
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php

$array
= [...]; //zie hierboven

$values = []; //hierin worden de referentie waarden verzameld
foreach($array as $record) $values += $record;
$diff = array_fill_keys($keys = array_keys($values),false); //init allen op false

foreach($array as $record) foreach($keys as $key)
  if(($record[$key] ?? 0) != $values[$key]) $diff[$key] = true; //diffs detecteren
$keys = array_keys(array_filter($diff)); //kolommen met een diff (niet meer false)

print('<table><thead><tr><th>Vraag</th>');
foreach($keys as $key) print("<th>$key</th>");
print('</tr></thead><tbody>');

foreach($array as $year => $record){
  print("<tr><td>$year</td>");
  foreach($keys as $key) print('<td>' . ($record[$key] ?? 0) . '</td>');
  print('</tr>');
}


print('</tbody></table>');

?>
 
Snelle Jaap

Snelle Jaap

04/11/2020 15:57:19
Quote Anchor link
Bedankt, ik heb het op kunnen lossen.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.