[PHP] Merge Arrays
Beste PHP-ers,
ik haal data uit mijn DB voor een stats systeem. Het gaat om het volgende:
Er worden 2 infos uit de DB gehaald (1: Land v. bezoeker, en 2: De O/S Taal). Deze zet ik in 2 apparte arrays. Daarnaast worden deze 2 infos in de mysql_query met COUNT() geteld, en ook in 2 apparte arrays gezet.
Hoe kan ik er nu voor zorgen dat alle data die bij landcode NL hoort (bijv. 10 bezoekers komen uit NL... dus "NL" => 10) in 1 array wordt zamengevoegd...?
Ik heb 't al met array_push geprobeert maar die zet het er alleen maar bij... Ik zou graag willen dat de array er dan zo uitziet:
en niet zo:
Alvast bedankt voor jullie suggesties/hulp...
Greetz, Mike ;)
ik haal data uit mijn DB voor een stats systeem. Het gaat om het volgende:
Er worden 2 infos uit de DB gehaald (1: Land v. bezoeker, en 2: De O/S Taal). Deze zet ik in 2 apparte arrays. Daarnaast worden deze 2 infos in de mysql_query met COUNT() geteld, en ook in 2 apparte arrays gezet.
Hoe kan ik er nu voor zorgen dat alle data die bij landcode NL hoort (bijv. 10 bezoekers komen uit NL... dus "NL" => 10) in 1 array wordt zamengevoegd...?
Ik heb 't al met array_push geprobeert maar die zet het er alleen maar bij... Ik zou graag willen dat de array er dan zo uitziet:
en niet zo:
Alvast bedankt voor jullie suggesties/hulp...
Greetz, Mike ;)
Gewijzigd op 01/01/1970 01:00:00 door Mike
Kan je niet gewoon met joins, group by e.d. werken?
Lijkt mij veel betere oplossing.
Lijkt mij veel betere oplossing.
Ik zal ff kijke hoe ik het anders kan oplossen...
Maar kan dat met die arrays? Nu ff voor een andere situatie tijdens het proggen...
Maar kan dat met die arrays? Nu ff voor een andere situatie tijdens het proggen...
Misschien kan je met + prutsen, zie language.operators.array.
Anders moet je denk ik met foreach gaan werken.
Anders moet je denk ik met foreach gaan werken.
Ok zal ff kijke welke optie voor mijn situatie werkt...
Ty voor je hulp tot nu toe :D
Ty voor je hulp tot nu toe :D
Het kan toch vrij simpel?
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
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
<?php
$landen = array ();
$test1 = array (
'NL' => 8,
'UK' => 6,
'BE' => 2,
);
$test2 = array (
'NL' => 8,
'UK' => 6,
);
foreach ($test1 as $k => $v) {
if (array_key_exists ($k, $landen)) {
$landen[$k] += $v;
}
else {
$landen[$k] = $v;
}
}
// normaal gesproken zet je deze maar 1 keer in je while loop als je fetcht
// om nu te testen met $test2 gebruik ik hem hier dubbel
foreach ($test2 as $k => $v) {
if (array_key_exists ($k, $landen)) {
$landen[$k] += $v;
}
else {
$landen[$k] = $v;
}
}
echo '<pre>' . print_r ($landen, true) . '</pre>';
?>
$landen = array ();
$test1 = array (
'NL' => 8,
'UK' => 6,
'BE' => 2,
);
$test2 = array (
'NL' => 8,
'UK' => 6,
);
foreach ($test1 as $k => $v) {
if (array_key_exists ($k, $landen)) {
$landen[$k] += $v;
}
else {
$landen[$k] = $v;
}
}
// normaal gesproken zet je deze maar 1 keer in je while loop als je fetcht
// om nu te testen met $test2 gebruik ik hem hier dubbel
foreach ($test2 as $k => $v) {
if (array_key_exists ($k, $landen)) {
$landen[$k] += $v;
}
else {
$landen[$k] = $v;
}
}
echo '<pre>' . print_r ($landen, true) . '</pre>';
?>
@ Jan:
Werkt uitstekend :D
Dank je wel!
@ All:
Hoe zou ik het volgende kunnen realisere?
Is dit überhaupt mogelijk? Zoja, hoe?
Werkt uitstekend :D
Dank je wel!
@ All:
Hoe zou ik het volgende kunnen realisere?
Is dit überhaupt mogelijk? Zoja, hoe?
In jouw voorbeeld is 'NL' geen key, maar een value.
'Jan:
In jouw voorbeeld is 'NL' geen key, maar een value.
Klopt...
Met array_combine(array 1, array 2); worden dezelfde telkens door de achterste overscheven... Hoe kan ik dit voorkomen?
Geef eens een voorbeeld met twee begin-arrays, en de array die je wilt krijgen. Dat is veel duidelijker.
Hier ff een voorbeeld...
Dit:
$array_a = array("DE", "NL", "GB", "BE", "NL");
$array_b = array("21", "17", "11", "8", "18");
omdat het i.v.m. mijn komplete script niet anders werkt...
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
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
<?php
$countries = array();
$languages = array();
// In deze array zit 2 x NL
$array_a = array("DE", "NL", "GB", "BE", "NL");
$array_b = array("21", "17", "11", "8", "18");
// In deze array zit 2 x DE
$array_c = array("NL", "DE", "ES", "BE", "DE");
$array_d = array("2", "15", "17", "1", "3");
$result_a = array_combine($array_a, $array_b);
$result_b = array_combine($array_c, $array_d);
foreach ($result_a as $key => $value) {
if (array_key_exists($key, $countries)) {
$countries[$key] += $value;
} else {
$countries[$key] = $value;
}
}
foreach ($result_b as $key => $value) {
if (array_key_exists($key, $languages)) {
$languages[$key] += $value;
} else {
$languages[$key] = $value;
}
}
ksort($countries);
ksort($languages);
echo '<pre>' . print_r($result_a, true) . '</pre>';
echo '<p> </p>';
echo '<pre>' . print_r($result_b, true) . '</pre>';
echo '<p> </p>';
echo '<pre>' . print_r($countries, true) . '</pre>';
echo '<p> </p>';
echo '<pre>' . print_r($languages, true) . '</pre>';
echo '<p> </p>';
?>
$countries = array();
$languages = array();
// In deze array zit 2 x NL
$array_a = array("DE", "NL", "GB", "BE", "NL");
$array_b = array("21", "17", "11", "8", "18");
// In deze array zit 2 x DE
$array_c = array("NL", "DE", "ES", "BE", "DE");
$array_d = array("2", "15", "17", "1", "3");
$result_a = array_combine($array_a, $array_b);
$result_b = array_combine($array_c, $array_d);
foreach ($result_a as $key => $value) {
if (array_key_exists($key, $countries)) {
$countries[$key] += $value;
} else {
$countries[$key] = $value;
}
}
foreach ($result_b as $key => $value) {
if (array_key_exists($key, $languages)) {
$languages[$key] += $value;
} else {
$languages[$key] = $value;
}
}
ksort($countries);
ksort($languages);
echo '<pre>' . print_r($result_a, true) . '</pre>';
echo '<p> </p>';
echo '<pre>' . print_r($result_b, true) . '</pre>';
echo '<p> </p>';
echo '<pre>' . print_r($countries, true) . '</pre>';
echo '<p> </p>';
echo '<pre>' . print_r($languages, true) . '</pre>';
echo '<p> </p>';
?>
Dit:
$array_a = array("DE", "NL", "GB", "BE", "NL");
$array_b = array("21", "17", "11", "8", "18");
omdat het i.v.m. mijn komplete script niet anders werkt...
Onderstaande code zet array_a, array_b, array_c en array_d om in 1 enkele array zoals je in het begin om vroeg. als ik je goed begrepen heb tenminste.
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
#| Create data array.
$data = array();
#| Create and fill info array.
$info = array_merge($array_b, $array_d);
#| Loop through country and language array.
foreach(array_merge($array_a, $array_c) as $key => $country)
{
#| Check if country has already been added to the $data array.
if(array_key_exists($country, $data))
{
#| Country exists, add $info[$key] value to the already stored amount.
$data[$country] += $info[$key];
}
else
{
#| Add new country to the data array.
$data[$country] = $info[$key];
}
}
?>
#| Create data array.
$data = array();
#| Create and fill info array.
$info = array_merge($array_b, $array_d);
#| Loop through country and language array.
foreach(array_merge($array_a, $array_c) as $key => $country)
{
#| Check if country has already been added to the $data array.
if(array_key_exists($country, $data))
{
#| Country exists, add $info[$key] value to the already stored amount.
$data[$country] += $info[$key];
}
else
{
#| Add new country to the data array.
$data[$country] = $info[$key];
}
}
?>
Gewijzigd op 01/01/1970 01:00:00 door - Mark -
Jep, werkt uitstekend...
Bedankt allemaal voor alle hulp!
Bedankt allemaal voor alle hulp!




