Werken met array_search
In onderstaande routine wordt d.m.v. array_search gezocht naar gegevens die aan een bepaalde voorwaarde voldoen. Deze voor waarde is bijv dat een afspraak aanvangt om 10 uur.
Als er één afspraak is werkt dit goed. Bij meerdere afspraken wordt slechts de eerste afspraak getoond. De tweede komt niet in beeld.
Ik zal wel een while-lus moeten toepassen maar ik zie op dit moment even niet hoe ik dat kan/moet doen. Wie heeft voor mij een suggestie?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<div class="ag_dagindeling_2" id="<?php echo $nVertIdnr ; ?>" draggable="true" ondragstart="drag(event)" ondrop="drop(event)" ondragover="allowDrop(event)">
<?php
$key = array_search($cAanvangstijd,$aAanvang);
if(substr($cAanvangstijd,0,2) == substr($aAanvang[$key],0,2)) {
$nIdnr = "divid" . $nVert;
?>
<a href="es-mutatie.php?id=<?php echo $aIdnr[$key] ; ?>">
<div draggable="true" id="<?php echo $nIdnr ; ?>" ondragstart="drag(event)" ondrop="drop(event)" ondragover="allowDrop(event)">
<div><?php echo substr($aAanvang[$key],0,5) . " - " . substr($aEinde[$key],0,5) ; ?></div>
<div><?php echo $aAuditant[$key] ; ?> </div>
</div>
</a>
<?php } ?>
</div>
<div class="clear"></div>
<?php
$key = array_search($cAanvangstijd,$aAanvang);
if(substr($cAanvangstijd,0,2) == substr($aAanvang[$key],0,2)) {
$nIdnr = "divid" . $nVert;
?>
<a href="es-mutatie.php?id=<?php echo $aIdnr[$key] ; ?>">
<div draggable="true" id="<?php echo $nIdnr ; ?>" ondragstart="drag(event)" ondrop="drop(event)" ondragover="allowDrop(event)">
<div><?php echo substr($aAanvang[$key],0,5) . " - " . substr($aEinde[$key],0,5) ; ?></div>
<div><?php echo $aAuditant[$key] ; ?> </div>
</div>
</a>
<?php } ?>
</div>
<div class="clear"></div>
Gewijzigd op 03/02/2014 12:16:34 door George van Baasbank
array_keys()
Dan wordt het zoiets
edit: code toegevoegd
array_search geeft inderdaad maar 1 resultaat. Zie ook de documentatie. Vergelijkbare functie is Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
$array = array("blue", "red", "green", "blue", "blue");
print_r(array_keys($array, "blue"));
/*
Array
(
[0] => 0
[1] => 3
[2] => 4
)
*/
print_r(array_keys($array, "blue"));
/*
Array
(
[0] => 0
[1] => 3
[2] => 4
)
*/
Dan wordt het zoiets
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
<div class="ag_dagindeling_2" id="<?php echo $nVertIdnr ; ?>" draggable="true" ondragstart="drag(event)" ondrop="drop(event)" ondragover="allowDrop(event)">
<?php
$keys = array_keys($aAanvang,$cAanvangstijd);
foreach($keys AS $key){
if(substr($cAanvangstijd,0,2) == substr($aAanvang[$key],0,2)) {
$nIdnr = "divid" . $nVert;
?>
<a href="es-mutatie.php?id=<?php echo $aIdnr[$key] ; ?>">
<div draggable="true" id="<?php echo $nIdnr ; ?>" ondragstart="drag(event)" ondrop="drop(event)" ondragover="allowDrop(event)">
<div><?php echo substr($aAanvang[$key],0,5) . " - " . substr($aEinde[$key],0,5) ; ?></div>
<div><?php echo $aAuditant[$key] ; ?> </div>
</div>
</a>
<?php
}
}
?>
</div>
<div class="clear"></div>
<?php
$keys = array_keys($aAanvang,$cAanvangstijd);
foreach($keys AS $key){
if(substr($cAanvangstijd,0,2) == substr($aAanvang[$key],0,2)) {
$nIdnr = "divid" . $nVert;
?>
<a href="es-mutatie.php?id=<?php echo $aIdnr[$key] ; ?>">
<div draggable="true" id="<?php echo $nIdnr ; ?>" ondragstart="drag(event)" ondrop="drop(event)" ondragover="allowDrop(event)">
<div><?php echo substr($aAanvang[$key],0,5) . " - " . substr($aEinde[$key],0,5) ; ?></div>
<div><?php echo $aAuditant[$key] ; ?> </div>
</div>
</a>
<?php
}
}
?>
</div>
<div class="clear"></div>
edit: code toegevoegd
Gewijzigd op 04/02/2014 11:50:34 door Michael -
Bedankt. Het werkt.
Topic gesloten
Michael - op 03/02/2014 12:22:00:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$keys = array_keys($aAanvang,$cAanvangstijd);
foreach($keys AS $key){
if(substr($cAanvangstijd,0,2) == substr($aAanvang[$key],0,2)) {
?>
$keys = array_keys($aAanvang,$cAanvangstijd);
foreach($keys AS $key){
if(substr($cAanvangstijd,0,2) == substr($aAanvang[$key],0,2)) {
?>
Aanvulling: dit is in PHP een zeer inefficiënte methode om een array af te lopen. Omdat PHP eigenlijk geen arrays kent maar dit onder water heeft geïmplementeerd als linked list, moet voor elke opgevraagde value de gehele linked list worden afgelopen (tot de betreffende key is gevonden). De verwerkingstijd neemt daardoor kwadratisch toe. Oftewel: als je array 10x zo groot wordt, duurt het 100x zo lang om alle elementen te verwerken.
Een efficiëntere manier is deze:
Code (php)
De verwerkingstijd zal hierdoor lineair groeien (dus: array 10x zo groot, dan verwerkingstijd ook 10x zo groot).
Bovendien loont het om als je een array-waarde vaker gebruikt, deze toe te kennen aan een aparte variabele. In het oorspronkelijke codefragment werd bijvoorbeeld 2x $aAanvang[$key] gebruikt, waardoor de verwerkingstijd nog eens 2x zo lang wordt. Als je aan het begin van de loop de array value eerst toekent aan een gewone variabele, hoeft de array slechts 1x te worden doorzocht.