array vraagje
ik heb volgende array:
array1
(
[0] => 15
[1] => 56
)
Die array1 zou moeten gezocht worden in deze array: (de volgorde moet ook kloppen, dus bovenste 2 waardes moeten in dezelfde volgorde voorkomen in onderste array2:
array2
(
[0] => 15
[1] => 56
[2] => 63
[3] => 37
[4] => 78
[5] => 83
[6] => 15
[7] => 56
[8] => 24
[9] => 46
)
het resultaat dat ik moet krijgen is (voor dit voorbeeld) 2 arrays waarin de keys zitten die overeenkomen, dus:
resultaatarray1
(
[0] => 0
[1] => 1
) <-- keys 0 en 1 van de array waarin gezocht werd heeft een geldige overeenkomst
resultaatarray2
(
[0] => 6
[1] => 7
) <-- keys 6 en 7 van de array waarin gezocht werd heeft een geldige overeenkomst
Hoe programmeer ik dit het best?
Bedankt aan alle specialisten hier op phpHulp!
JV
Array2[0] en Array2[1] komen ook overeen. Hoe wil je hiermee omgaan?
dan is de resultaatsarray: [0]=3, [1]=4
en er is maar één array omdat dit maar een keer voorkomt.
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
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
<?php
function test ($array1 , $array2)
{
$count = count($array1) ;
$array1_str = implode($array1 , ",") ;
$i = 0;
$match_arr = array() ;
while($i < count($array2))
{
$x = 0;
$string = "" ;
$key_arr = array() ;
while($x < $count)
{
$key = $i + $x ;
$key_arr[] = $key ;
$string .= $array2[$key] . "," ;
$x++ ;
}
$string = substr($string , 0 , -1) ;
print $string . "<br />";
if($string == $array1_str)
{
$match_arr[] = $key_arr ;
}
$i++;
}
return $match_arr ;
}
$testArr = array(2,3) ;
$testArr2 = array(1,2,3,4,5,1,2) ;
echo "<pre>";
print_r(test($testArr , $testArr2));
echo "</pre>";
?>
function test ($array1 , $array2)
{
$count = count($array1) ;
$array1_str = implode($array1 , ",") ;
$i = 0;
$match_arr = array() ;
while($i < count($array2))
{
$x = 0;
$string = "" ;
$key_arr = array() ;
while($x < $count)
{
$key = $i + $x ;
$key_arr[] = $key ;
$string .= $array2[$key] . "," ;
$x++ ;
}
$string = substr($string , 0 , -1) ;
print $string . "<br />";
if($string == $array1_str)
{
$match_arr[] = $key_arr ;
}
$i++;
}
return $match_arr ;
}
$testArr = array(2,3) ;
$testArr2 = array(1,2,3,4,5,1,2) ;
echo "<pre>";
print_r(test($testArr , $testArr2));
echo "</pre>";
?>
Dit gaat werken ongeacht het aantal items in testArr (je kunt ook op 3 of 4 items matchen) en returned een multidimentionale array waar alle matchsets in zitten.
Ja ik weet het er zitten notices in maar 1 is dit niet phpvoorkauw en 2 zit ik op mn werk dus mag niet teveel tijd kosten :P
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
55
56
57
58
59
60
61
62
63
64
65
66
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
55
56
57
58
59
60
61
62
63
64
65
66
<?php
#| Settings :: De te zoeken waardes.
$search = array(15, 56);
#| Settings :: De te doorzoeken array.
$haystack = array(15, 56, 63, 37, 78, 83, 15, 56, 24, 46, 15);
#| Default :: Set array $results voor het opslaan van de resultaten.
$results = array();
#| Dan gaan we nu de sleutels ophalen van de eerste waarde van de te zoeken array.
$keys = array_keys($haystack, $search[0]);
#| De lengte van de te zoeken array bepalen.
$search_length = count($search);
#| Alle gevonden eerste sleutels doorlopen en kijken of de rest ook klopt.
foreach($keys as $key){
#| Set array $temp voor het opslaan van de huidige block.
$temp = array();
#| De huidige block samenstellen.
for($i = $key; $i <= (($key - 1) + $search_length); $i++){
#| Controleren of de gezochte sleutel wel bestaat.
if(array_key_exists($i, $haystack)){
#| De gevonde sleutel toevoegen aan de tijdelijke array.
$temp[$i] = $haystack[$i];
}
}
#| Controleren of de huidige block overeen komt.
if(count(array_intersect($search, $temp)) == $search_length){
#| Het komt overeen dus dan gaan we nu de gevonden sleutels ophalen en toevoegen aan array $results.
$results[] = array_keys($temp);
}
}
print_r($results);
?>
#| Settings :: De te zoeken waardes.
$search = array(15, 56);
#| Settings :: De te doorzoeken array.
$haystack = array(15, 56, 63, 37, 78, 83, 15, 56, 24, 46, 15);
#| Default :: Set array $results voor het opslaan van de resultaten.
$results = array();
#| Dan gaan we nu de sleutels ophalen van de eerste waarde van de te zoeken array.
$keys = array_keys($haystack, $search[0]);
#| De lengte van de te zoeken array bepalen.
$search_length = count($search);
#| Alle gevonden eerste sleutels doorlopen en kijken of de rest ook klopt.
foreach($keys as $key){
#| Set array $temp voor het opslaan van de huidige block.
$temp = array();
#| De huidige block samenstellen.
for($i = $key; $i <= (($key - 1) + $search_length); $i++){
#| Controleren of de gezochte sleutel wel bestaat.
if(array_key_exists($i, $haystack)){
#| De gevonde sleutel toevoegen aan de tijdelijke array.
$temp[$i] = $haystack[$i];
}
}
#| Controleren of de huidige block overeen komt.
if(count(array_intersect($search, $temp)) == $search_length){
#| Het komt overeen dus dan gaan we nu de gevonden sleutels ophalen en toevoegen aan array $results.
$results[] = array_keys($temp);
}
}
print_r($results);
?>
Maar waar heb je dit voor nodig als ik vragen mag? Ik heb nog nooit iemand voor zoiets zien vragen volgens mij.
Dit is het resultaat zoals ik het wil! Hartelijk dank en bedankt voor jullie tijd!
Groetjes,
JV
Toevoeging op 03/05/2012 11:58:24:
@ Mark: Het is voor een programma dat tijdsberekeningen uitvoert. de nummers in de arrays zijn eigenlijk checkpoints op fietsroutes. (15, 56 <= dit betekent van punt 1 naar punt 5 en van punt 5 naar punt 6) <== dit is een geldige route.
De tweede array zijn alle checkpoints (routes) die een fietser afgelegd heeft.
Op die manier kan ik controleren welke en hoeveel geldige routes een persoon heeft afgelegd.
Ah oke, nu is het me wat duidelijker.