Hoe kan ik de gegevens uit deze array juist plaatsen in een tabel
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
)
)
de rijen van het array omwisselen met de kolommen. Dit beschrijf je hierboven ook letterlijk. Dit lijkt mij niet zo'n moeilijke omzetting?
Het enige wat je hoeft te doen is Gewijzigd op 15/09/2020 14:49:36 door Thomas van den Heuvel
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 -
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.
Er zijn verschillende manieren om deze "gaten" nog op te vullen, maar het principe (rijen en kolommen verwisselen) blijft in grote lijnen hetzelfde.
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.