Uitwerking
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
# Custom strpos
function myStrpos( $Haystack, $Needle )
{
# Matches array
$Matches = array( );
# Lowercase both $Haystack & $Needle
$Needle = strtolower( $Needle );
$Haystack = strtolower( $Haystack );
# Lengt needle
$Length = strlen( $Needle ) - 1;
# Loop through string
for( $i = 0; $Haystack{$i}; $i++ )
{
# Save start position
$Start = $i;
# (*1)
for( $j = 0; $Haystack{$i+$j} == $Needle{$j}; $j++ )
{
# Match has been found if $j reaches strlen-1
if( $Length == $j )
{
# Save start pos
$Matches[] = $Start;
break;
}
}
}
# Return array
return $Matches;
}
?>
# Custom strpos
function myStrpos( $Haystack, $Needle )
{
# Matches array
$Matches = array( );
# Lowercase both $Haystack & $Needle
$Needle = strtolower( $Needle );
$Haystack = strtolower( $Haystack );
# Lengt needle
$Length = strlen( $Needle ) - 1;
# Loop through string
for( $i = 0; $Haystack{$i}; $i++ )
{
# Save start position
$Start = $i;
# (*1)
for( $j = 0; $Haystack{$i+$j} == $Needle{$j}; $j++ )
{
# Match has been found if $j reaches strlen-1
if( $Length == $j )
{
# Save start pos
$Matches[] = $Start;
break;
}
}
}
# Return array
return $Matches;
}
?>
Je ziet 2 sterretjes in de comments, hieronder de verklaring ;)
*1 Zoals je ziet hoeft een for() loop niet altijd een $i<getal te hebben, je kunt alle true/false expressies gebruiken die je wilt, en dat biedt uitkomst in onze functie.
*2 Je vraagt je vast af waarom ik een lege array teruggeef als er geen matches zijn. Dat is om de doodsimpele reden dat een nette functie maar 1 return type mag hebben. Er wordt nu dus te allen tijde een array teruggegeven.
if( count( $array ) > 0 ) zou je bijv. als "check" op matches kunnen gebruiken.
Succes ermee, en post hier je eigen PHPlib verbeteringen!