Hoe kan ik de gegevens uit deze array juist plaatsen in een tabel
Ik heb de volgende array:
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:
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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
)
)
(
[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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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>
<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
Kijk eens naar de array_diff() functie.
- 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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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
)
)
(
[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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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
)
)
(
[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
)
)
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
Of je doet even ingewikkeld en je hebt precies wat je wilt.
Werkt ook als er een nieuw jaar bij komt.
Werkt ook als er een nieuw jaar bij komt.
Code (php)
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
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>
# 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 -
Volgens mij bedoel je meer dit:
Code (php)
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
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>');
?>
$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>');
?>
@Rob Doemaarwat: Maar bij jou missen er enkele waarden.
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.
Er zijn verschillende manieren om deze "gaten" nog op te vullen, maar het principe (rijen en kolommen verwisselen) blijft in grote lijnen hetzelfde.
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)
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
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>');
?>
$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>');
?>
Bedankt, ik heb het op kunnen lossen.




