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:


array (
    "NL" => 10,
    "UK" => 21,
    "BE" => 2
)


en niet zo:


array (
    "NL" => 8,
    "UK" => 6,
    "NL" => 2,
    "BE" => 2,
    "UK" => 15,
)


Alvast bedankt voor jullie suggesties/hulp...


Greetz, Mike ;)
Kan je niet gewoon met joins, group by e.d. werken?
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...


Misschien kan je met + prutsen, zie [php]language.operators.array[/php].
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
Het kan toch vrij simpel?
<?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>';
?>
@ Jan:

Werkt uitstekend :D

Dank je wel!

@ All:

Hoe zou ik het volgende kunnen realisere?


// Let op de twee NL keys...
$array_a = array("DE", "NL", "GB", "BE", "NL");


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.
Hier ff een voorbeeld...


<?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>&nbsp;</p>';
echo '<pre>' . print_r($result_b, true) . '</pre>';
echo '<p>&nbsp;</p>';
echo '<pre>' . print_r($countries, true) . '</pre>';
echo '<p>&nbsp;</p>';
echo '<pre>' . print_r($languages, true) . '</pre>';
echo '<p>&nbsp;</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...




Reageren