div einde toevoegen nadata alle elementen per category er in staan
Zonder de div te moeten sluiten per categorie werkt het perfect.
Helaas heb ik voor deze toepassing de volgende structuur nodig.
categorie 1
<div>
<ul>
<li>item1</<li>
</ul>
</div>
categorie 2
<div>
<ul>
<li>item1</<li>
</ul>
</div>
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
50
51
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
50
51
<?php
$result = $con->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$rows[]=$row;
}
}
$con->close();
if($rows==true){
$sorted = array();
$test = array();
$count = 0;
$cat= array();
foreach ($rows as $v) {
if(!array_key_exists($v['Categorie_NL'], $sorted )) {
$sorted[$v["Categorie_NL"]] = array();
echo'
<button class="collapsible">'.$v["Categorie_NL"].' </button>
<div class="content"><ul>
';
}
$sorted[$v["Categorie_NL"]][] = $v["Aid"]; sort($sorted[$v['Categorie_NL']]);
echo"<li> ".$v["Artikel_ID"]."</li>\r\n" ;
$cat[]=$v["Categorie_NL"];
$verder= next($cat);
$huidig= current($cat);
if(!empty($verder) && $huidig != $verder){
echo"</ul></div>";
}
}
ksort($sorted);
}
else
{
echo"Er werden geen documenten weerhouden" ;
}
?>
$result = $con->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$rows[]=$row;
}
}
$con->close();
if($rows==true){
$sorted = array();
$test = array();
$count = 0;
$cat= array();
foreach ($rows as $v) {
if(!array_key_exists($v['Categorie_NL'], $sorted )) {
$sorted[$v["Categorie_NL"]] = array();
echo'
<button class="collapsible">'.$v["Categorie_NL"].' </button>
<div class="content"><ul>
';
}
$sorted[$v["Categorie_NL"]][] = $v["Aid"]; sort($sorted[$v['Categorie_NL']]);
echo"<li> ".$v["Artikel_ID"]."</li>\r\n" ;
$cat[]=$v["Categorie_NL"];
$verder= next($cat);
$huidig= current($cat);
if(!empty($verder) && $huidig != $verder){
echo"</ul></div>";
}
}
ksort($sorted);
}
else
{
echo"Er werden geen documenten weerhouden" ;
}
?>
Gewijzigd op 26/04/2020 20:03:56 door Bart Smulders
Hoe komt het er nu uit?
<button class="collapsible active">Buitenposten </button>
<div class="content" style="max-height: 90px;"><ul>
<li> JPDV</li><li> JPDVF</li>
<button class="collapsible active">Voedingen </button>
<div class="content" style="max-height: 138px;"><ul>
<li> PS2420DM</li><li> JPDVFL</li>
<li> GTD</li>
<li> BIS1</li>
<li> BIE1</li>
<button class="collapsible">Binnenposten </button>
<div class="content"><ul>
<li> JP4HD</li><li> MCWSA</li>
<button class="collapsible">Toegangscontrole </button>
<div class="content"><ul>
<li> AC10S</li>
<button class="collapsible">Toebehoren </button>
<div class="content"><ul>
<li> JPWBA</li>
<li> JP8Z</li>
<li> KJKF</li>
<li> MGF30</li>
<button class="collapsible">Bel & relais </button>
<div class="content"><ul>
<li> RY3DL</li>
<li> IER2</li>
<li> TAR4</li>
<li> CSJMDVFL</li>
<button class="collapsible">Interface </button>
<div class="content"><ul>
<li> JPTLI</li>
<li> JPTLIIPA</li>
Vanaf regel 34 stond er eerst :
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
echo"<li> ".$v["Artikel_ID"]."</li>" ;
$cat[]=$v["Categorie_NL"];
$verder= next($cat);
$huidig= current($cat);
if(!empty($verder) && $huidig != $verder){
echo"</ul></div>";
}
$cat[]=$v["Categorie_NL"];
$verder= next($cat);
$huidig= current($cat);
if(!empty($verder) && $huidig != $verder){
echo"</ul></div>";
}
Als aan de IF wordt voldaan worden de UL en DIV afgesloten.
Hier de code die er eerst stond :
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
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
<?php
$result = $con->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$rows[]=$row;
}
}
else {
$hint="";
}
$con->close();
if ($hint=="") {
} else {
echo $hint;
}
if($rows==true){
$sorted = array();
$test = array();
$count = 0;
$cat= array();
foreach ($rows as $v) {
if(!array_key_exists($v['Categorie_NL'], $sorted )) {
$sorted[$v["Categorie_NL"]] = array();
echo'
<button class="collapsible">'.$v["Categorie_NL"].' </button>
<div class="content"><ul>
';
}
$sorted[$v["Categorie_NL"]][] = $v["Aid"];
sort($sorted[$v['Categorie_NL']]);
echo"<li> ".$v["Artikel_ID"]."</li>" ;
$cat[]=$v["Categorie_NL"];
$verder= next($cat);
$huidig= current($cat);
if(!empty($verder) && $huidig != $verder){
echo"</ul></div>";
}
}
ksort($sorted);
}
else
{
echo"Er werd niets weerhouden" ;
}
?>
$result = $con->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$rows[]=$row;
}
}
else {
$hint="";
}
$con->close();
if ($hint=="") {
} else {
echo $hint;
}
if($rows==true){
$sorted = array();
$test = array();
$count = 0;
$cat= array();
foreach ($rows as $v) {
if(!array_key_exists($v['Categorie_NL'], $sorted )) {
$sorted[$v["Categorie_NL"]] = array();
echo'
<button class="collapsible">'.$v["Categorie_NL"].' </button>
<div class="content"><ul>
';
}
$sorted[$v["Categorie_NL"]][] = $v["Aid"];
sort($sorted[$v['Categorie_NL']]);
echo"<li> ".$v["Artikel_ID"]."</li>" ;
$cat[]=$v["Categorie_NL"];
$verder= next($cat);
$huidig= current($cat);
if(!empty($verder) && $huidig != $verder){
echo"</ul></div>";
}
}
ksort($sorted);
}
else
{
echo"Er werd niets weerhouden" ;
}
?>
Gewijzigd op 26/04/2020 19:08:41 door Adoptive Solution
Gooi er meteen wat tabs in, want het is echt niet echt lekker leesbaar zo.
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
50
51
52
53
54
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
50
51
52
53
54
<?php
$result = $con->query($sql);
if ($result->num_rows > 0)
{
// output data of each row
while( $row = $result->fetch_assoc() )
{
$rows[]=$row;
}
} else {
$hint="";
}
$con->close();
if ( $hint == "" )
{
} else {
echo $hint;
}
if( $rows == true )
{
$sorted = array();
$test = array();
$count = 0;
$cat= array();
foreach ( $rows as $v )
{
if( !array_key_exists($v['Categorie_NL'], $sorted ) )
{
$sorted[$v["Categorie_NL"]] = array();
echo '<button class="collapsible">'.$v["Categorie_NL"].' </button>
<div class="content"><ul>';
}
$sorted[$v["Categorie_NL"]][] = $v["Aid"];
sort($sorted[$v['Categorie_NL']]);
echo "<li> " . $v["Artikel_ID"] . "</li>";
// vanaf hier ontbreekt het in het aangepaste bericht
$cat[]=$v["Categorie_NL"];
$verder= next($cat);
$huidig= current($cat);
if( !empty( $verder ) && $huidig != $verder )
{
echo "</ul></div>";
}
// tot hier ontbreekt het
}
ksort($sorted);
} else {
echo"Er werd niets weerhouden" ;
}
?>
$result = $con->query($sql);
if ($result->num_rows > 0)
{
// output data of each row
while( $row = $result->fetch_assoc() )
{
$rows[]=$row;
}
} else {
$hint="";
}
$con->close();
if ( $hint == "" )
{
} else {
echo $hint;
}
if( $rows == true )
{
$sorted = array();
$test = array();
$count = 0;
$cat= array();
foreach ( $rows as $v )
{
if( !array_key_exists($v['Categorie_NL'], $sorted ) )
{
$sorted[$v["Categorie_NL"]] = array();
echo '<button class="collapsible">'.$v["Categorie_NL"].' </button>
<div class="content"><ul>';
}
$sorted[$v["Categorie_NL"]][] = $v["Aid"];
sort($sorted[$v['Categorie_NL']]);
echo "<li> " . $v["Artikel_ID"] . "</li>";
// vanaf hier ontbreekt het in het aangepaste bericht
$cat[]=$v["Categorie_NL"];
$verder= next($cat);
$huidig= current($cat);
if( !empty( $verder ) && $huidig != $verder )
{
echo "</ul></div>";
}
// tot hier ontbreekt het
}
ksort($sorted);
} else {
echo"Er werd niets weerhouden" ;
}
?>
Als de UL en DIV niet worden getoond, voldoet de IF niet in
Gewijzigd op 26/04/2020 19:27:21 door Adoptive Solution
Wanneer ik de volgende vars in echo zet krijg ik:
$verder = leeg
$huidig = leeg
$v["Categorie_NL"]= elke categorie word weer gegeven.
Zo heb ik de indruk dat array $cat[] niet gevuld word en er dus geen volgende of vorige kan zijn.
De enige reden dat je twee loops zou kunnen rechtvaardigen is als je de applicatielogica en layout verder uit elkaar zou trekken, bijvoorbeeld als je met templates werkt ofzo. Of misschien voor de overzichtelijkheid, maar ik vind de bovenstaande code allesbehalve overzichtelijk.
EDIT nog een alternatief: als je dan toch een loop spendeert aan het in een soort van datastructuur gieten van je data, organiseer dan je data per categorie, en zet daar dan de items onder, zodat je vervolgens dit kunt doen:
Code (php)
Als je dan toch arrays aan het bouwen bent, maak hier dan slim gebruik van.
Gewijzigd op 26/04/2020 23:40:46 door Thomas van den Heuvel
Dank voor jou input, echter:
1-> Er is geen controle meer of de categorie nu al dan niet reeds getoond werd of niet.
En krijg ik nu het volgende resultaat wat ik wel verwacht had.
A
A
A
B
B
B
C
C
C
C
D
D
D
Hoe zou jij het normaal doen?
Alvast bedankt voor jou antwoord.
Vervolgens kun je ofwel on-the-fly bijhouden of je van categorie geschakeld bent (maar dit levert redelijk wollige code op), of je bouwt eerst een hulparray (datastructuur) waarin je alles gewoon in een categorie-subarray duwt.
Dus zoiets:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$myCategoryDataSet = array();
$res = $con->query($sql);
while ($row = $res->fetch_assoc()) {
if (empty($myCategoryDataSet[$row['Categorie_NL']])) {
// als dit categorie-array nog niet bestaat, maak deze aan
$myCategoryDataSet[$row['Categorie_NL']] = array(
'items' => array(),
// en wat je hier verder nog op categorie-niveau in wilt zetten
// als je verder geen categorie-specifieke informatie hebt zou
// je het items-subarray achterwege kunnen laten / eruit kunnen slopen
);
}
// nu we er van verzekerd zijn dat het categorie-subarray bestaat kunnen we zonder zorgen items toevoegen
// ik gooi hier simpelweg $row in, maar je zou dit verder zelf uit kunnen werken wat je van $row nodig hebt
$myCategoryDataSet[$row['Categorie_NL']]['items'][] = $row;
}
?>
$myCategoryDataSet = array();
$res = $con->query($sql);
while ($row = $res->fetch_assoc()) {
if (empty($myCategoryDataSet[$row['Categorie_NL']])) {
// als dit categorie-array nog niet bestaat, maak deze aan
$myCategoryDataSet[$row['Categorie_NL']] = array(
'items' => array(),
// en wat je hier verder nog op categorie-niveau in wilt zetten
// als je verder geen categorie-specifieke informatie hebt zou
// je het items-subarray achterwege kunnen laten / eruit kunnen slopen
);
}
// nu we er van verzekerd zijn dat het categorie-subarray bestaat kunnen we zonder zorgen items toevoegen
// ik gooi hier simpelweg $row in, maar je zou dit verder zelf uit kunnen werken wat je van $row nodig hebt
$myCategoryDataSet[$row['Categorie_NL']]['items'][] = $row;
}
?>
En vervolgens kun je dit met de code uit mijn vorige reactie uitlezen.
100x dank.
En zoals je zei heb ik eerst de data gesorteerd in de query.
De finale code werd dan. Dit werkt perfect.
Het gebruik van array's blijft een moeilijk thema.
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
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
<?php
$result = $con->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while ($row = $result->fetch_assoc()) {
if (empty($myCategoryDataSet[$row['Categorie_NL']])) {
// als dit categorie-array nog niet bestaat, maak deze aan
$myCategoryDataSet[$row['Categorie_NL']] = array(
'items' => array(),
);
}
$myCategoryDataSet[$row['Categorie_NL']]['items'][] = $row;
}
}
else
{
echo"Er werden geen documenten weerhouden" ;
}
$con->close();
foreach ($myCategoryDataSet as $category) {
echo'
<button class="collapsible">'.$category['items'][0]["Categorie_NL"].' </button>
<div class="content"><ul>
';
foreach ($category['items'] as $item) {
echo"<li> ".$item["Artikel_ID"]."</li>\r\n" ;
}
echo"</ul></div>";
}
?>
$result = $con->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while ($row = $result->fetch_assoc()) {
if (empty($myCategoryDataSet[$row['Categorie_NL']])) {
// als dit categorie-array nog niet bestaat, maak deze aan
$myCategoryDataSet[$row['Categorie_NL']] = array(
'items' => array(),
);
}
$myCategoryDataSet[$row['Categorie_NL']]['items'][] = $row;
}
}
else
{
echo"Er werden geen documenten weerhouden" ;
}
$con->close();
foreach ($myCategoryDataSet as $category) {
echo'
<button class="collapsible">'.$category['items'][0]["Categorie_NL"].' </button>
<div class="content"><ul>
';
foreach ($category['items'] as $item) {
echo"<li> ".$item["Artikel_ID"]."</li>\r\n" ;
}
echo"</ul></div>";
}
?>
Onderwerp gesloten.