Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Objekte zählen? [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Objekte zählen?


 
petro_0
20-12-2006, 15:52 
 
AHllo Zusammen,
ich habe folgende Frage.

Wie kann ich die Anzahl eines bestimmten Wertes einen Objektes zählen?

Also ich habe z.B. den Wert Nord, Süd, Wets und Ost.

Dazu habe ich eine Abfrage die mir Datensätze mit den verschiedenen Werten liefert.

Jetzt will ich die Anzahl der Nord, Süd und so weiter zählen.

Hier meine Aussage per print_r.

stdClass Object
(
[caseData] => CaseObj Object
(
[attributes:private] => stdClass Object
(
[caseID] => 1234567
[erstellt] => 2006-10-19 00:21:53

)

)

[qplz] => Array
(
[0] => stdClass Object
(
[plz] => 81664
[region] => West

)

)

[qmsc] => Array
(
[0] => stdClass Object
(
[plz] => 81667
[bsc] => 1234678
[msc] => 547894521
)

)

)
Ich habe es schon mit $data->qplz->region[0]->west versucht, aber das geht nicht.


Wie kann ich auf den Wert plz ([region] => West) im Object [qplz] zugreifen??




Danke

 
hhcm
20-12-2006, 18:22 
 
Ich würd eher

$data->qplz["region"] behaupten...

 
petro_0
20-12-2006, 18:22 
 
keiner da der sich auskennt und mir helfen will??

 
petro_0
20-12-2006, 18:34 
 
also ich habs jetzt nach dem tip so versucht.


$caseData = array();
foreach ($cases as $id) {
$case = CaseObj::find($id); //liefert ALLE Casedaten pro Case über die externe Function CaseObj.
$data = new stdClass(); //Klasse die einen Container um das Array bildet.
$data->caseData = $case; //Bildet um das Case Array (Casedaten) einen Objekt Container
$data->qplz = $q->qplz($case->plz); //holt sich die qplz Daten zu den cases/ plz
$data->qmsc = $q->qmsc($case->plz); //holt sich die qmsc Daten zu den cases / plz
$caseData[$case->caseID] = $data; //fügt die Casedaten und die qplz sowie die qmsc Daten zu einer Klasse/Objekt zusammen

print_r(count($data->qplz[0]->region['ost']));

}


Es kommt raus:

1111111111111111111111111111111111111111111111111111111111111101111

Wie muss ich basteln, damit er mir jeden Datensatz einzeln zählt, sondern nach Ost, Wets u.s.w. ??

 
petro_0
21-12-2006, 18:39 
 
Hallo Guten Abend,

evtl. kann und will mir ja heute nochmal jemand weiter helfen.

Ich tüfftle immernoch mit der zählerei rum.

Folgendes habe ich nun erreich:


foreach ($caseData as $r) {
if (trim($r->qplz[0]->region) == "West") {
$w = count($r->qplz[0]->region);
print_r($w);
}
if (trim($r->qplz[0]->region) == "Ost") {
$o = count($r->qplz[0]->region);
print_r($o);
}
if (trim($r->qplz[0]->region) == "Sued") {
$s = count($r->qplz[0]->region);
print_r($s);
}
if (trim($r->qplz[0]->region) == "Nord") {
$n = count($r->qplz[0]->region);
print_r($n);
}
}


Und Ergebnis ist 111111111111111111111111111111111111111111111111
111111111111111111111111111


So hab ich den Wert 1 für jeden Fall, aber wie bekomme ich die Anzahl für jede REgion raus?


Danke!

 
petro_0
21-12-2006, 20:46 
 
hat sich erledigt.
Ich konnte mir nun selber helfen...

Habe einfach folgendes gemacht.

foreach ($caseData as $r) {
if (trim($r->qplz[0]->region) == "West") {
$w[$r->qplz[0]->region]++;
}
if (trim($r->qplz[0]->region) == "Ost") {
$o[$r->qplz[0]->region]++;
}
if (trim($r->qplz[0]->region) == "Sued") {
$s[$r->qplz[0]->region]++;
}
if (trim($r->qplz[0]->region) == "Nord") {
$n[$r->qplz[0]->region]++;
}
}

 
3DMax
21-12-2006, 20:56 
 
so richtig habe ich nicht den plan, was du da treibst, aber sei es drum.

du hast also alle objekte in einem array und durchläufst damit alle per
foreach ($caseData as $r).

jetzt möchtest du die anzahl der jeweiligen regionen zählen, auf die du über den public member $r->qplz[0]->region zugreifen kannst - richtig?

dazu kannst du dir ein array treffer anlegen array('west'=>0, 'ost'=>0 ... usw.)
... und innerhalb der foreach-schleife erhöhst du den value des entsprechenden keys/region um 1, welcher wert erhöht wird, entscheidet sich wiedrum innerhalb von switch-case

 
jahlives
22-12-2006, 07:18 
 
@topicstarter
Du hast einfach bei jedem Schleifendurchlauf die Zahl angegeben. Besser wäre es aber diese Zahlen zu addieren

$ost = 0;
$west = 0;
$nord = 0;
$sued = 0;
foreach ($cases as $id) {
switch($id->qplz[0]->region){
case 'nord':
$nord += 1;
break;
case 'west':
$west += 1;
break;
case 'ost':
$ost += 1;
break;
case 'sued':
$sued += 1;
break;
}
}

Gruss

tobi

 
petro_0
22-12-2006, 18:51 
 
danke tobi,

du bist wenigstens der einzigste hier der erstens einen plan hat und mir zweitens bisher immer helfen konnte.

Ja per switch case hab ich es auch schon versucht und nicht hin bekommen (weil falsch gedacht) ;o(

Ich habs jetzt wie gesagt anders gelöst, geht auch;o)

Danke Dir!


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:07 Uhr.