[PHP] Merge Arrays
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
Lijkt mij veel betere oplossing.
Maar kan dat met die arrays? Nu ff voor een andere situatie tijdens het proggen...
language.operators.array.
Anders moet je denk ik met foreach gaan werken.
Misschien kan je met + prutsen, zie Anders moet je denk ik met foreach gaan werken.
Ty voor je hulp tot nu toe :D
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>';
?>
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 Koehoorn schreef op 11.09.2009 16:05:
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.
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...
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 -
Bedankt allemaal voor alle hulp!