php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 15.03.2007, 18:13  
Erfahrener Benutzer
 
Registriert seit: 16.02.2006
Beiträge: 303
tinchen
Standard Bestimmte Elemente eines Objekts zählen

Das ist mir dazu eingefallen, aber das kann man doch bestimmt besser und kürzer machen?

PHP-Code:
    $counter = array();
    
$config->us_1 $counter[] = '';
    
$config->us_2 $counter[] = '';
    
$config->us_3 $counter[] = '';
    
$config->us_4 $counter[] = '';
    
$config->us_5 $counter[] = '';
    
$config->us_6 $counter[] = '';
    echo 
count($counter); 
Im Objekt $config ist noch einiges mehr drin. Ich möchte aber nur
die zählen, die mit us_ anfangen. Das oben geht zwar, kommt mir
aber sehr gruselig vor.

Grüße
Tine
tinchen ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 15.03.2007, 18:18  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Dann solltest du $config auch noch mal als mehrdimensionales Array verwenden. Also

$config['us']['1'] ...

Dann kannst du $config['us'] mit ner Schleife durchgehen und hast alle Variablen mit us ...
Flor1an ist offline  
Alt 15.03.2007, 18:28  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Wieso nimmste kein Array? hmm ... Irgendwie kommt mir die Frage bekannt vor ^^ Was war darauf die Antwort? Etwas "unschön", aber funktional wäre sowas

Was genau macht das da eigentlich?! Nicht persönlich nehmen, aber du solltest dir wirklich den Triditätsoperator nochma genau anschauen ^^

Dein Code prüft, ob $config->us_x gesetzt ist. Wenn ja, fügt es an $counter[] eine 1 an, wenn nicht, gibt es einen leeren String zurück, welcher aber nirgens abgefangen wird ^^

Also ausgehend vom Themen-Titel (das du die Elemente wirklich zählen willst):

PHP-Code:
$count 0;
$count += (isset ($config->us_1)) ? 0
Und jetz mit dynamischen Teil:
PHP-Code:
$vars get_class_vars ($config);
$count 0;
foreach (
$vars as $var) {
  
$count += (substr($var,0,3) === 'us_') ? 0;

Trotzdem lege ich dir dringend Arrays ans Herz
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
Alt 15.03.2007, 18:51  
Erfahrener Benutzer
 
Registriert seit: 16.02.2006
Beiträge: 303
tinchen
Standard

So läuft das gar nicht.
Das ist ja nicht in der Klasse selbst. Die ist doch schon fertig. Das ist eine Config,
die das Aussehen von HTML Strukturen steuert. Es gibt mehrere Konfigurationen in der
Datenbank, die allesamt bearbeitet werden können. Hier wird zum Beispiel eine
Tabelle zusammengeschustert und $count soll die Spalten zählen.

Mein Objekt wird durch meine DB Klasse generiert.
PHP-Code:
function loadConfig$row=) {
    global 
$database;
    
$row intval$row );

    
$config = new config$database );
    
// load the row from the db table
    
$config->load$row );
    return 
$config;

Da ist schon alles so, wie ich mir das vorgestellt habe.
Das heißt also, es gibt in diesem Objekt, dass alle vars der jeweiligen Klasse
enthält nun Elemente die bestimmt Präfixe haben, weil die bestimmt Sachen
steuern. Nun möchte ich diese mit Präfix zählen können, um ggf. colspans etc.
setzten zu können. Das da stelt us_1 ue_2, ... ist ja nur ein Beispiel. Da kann alles
mögliche hinter dem Präfix stehen.

Und außerhalb der eigentlichen Kasse wird es mit get_class_vars wohl eng.
tinchen ist offline  
Alt 15.03.2007, 19:01  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

kannst du doch als Methode des configs einrichten. und get_object_vars benutzen.

willst du eigentlich die attribute mit dem präfix zählen (Fall 1), oder nur diejenigen die auch in irgendeiner form gesetzt (bool true) sind (Fall 2)?

auch wenns bestimmt wieder mecker gibt (performance), auch mit reg. ausdrücken kann man da ran gehen (wenn die überprüfung mal etwas spezieller sein soll) - (ungetestet):

PHP-Code:
<?php

// Fall 1:
$aAttributes array_keys (get_object_vars ($oConfig));
$iCount count (preg_grep ('^us_' $aAttributes));

// Fall 2:
$aNoMatch = array ('' null , array ());
$aAttributes array_keys (
                                       
array_diff (get_object_vars ($oConfig)
                                                       
$aNoMatch));
$iCount count (preg_grep ('^us_' $aAttributes));
nikosch ist gerade online  
Alt 15.03.2007, 19:30  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Schöne Lösung nikosch. preg_grep kannte ich noch garnicht.

Ich schlag nochmal die Holzhammer Methode vor:
PHP-Code:
<?php
for ($i 1$i 999$i++) {
  
$tmp "us_$i";
  if (!isset(
$config->$tmp)) {
    break;
  }
}
// Lösung: $i - 1
?>
Zergling-new ist offline  
Alt 15.03.2007, 19:49  
Erfahrener Benutzer
 
Registriert seit: 16.02.2006
Beiträge: 303
tinchen
Standard

Sehr gut, vielen Dank für die Hilfe.
Ich hatte mir das einfacher vorgestellt, aber es läuft.

PHP-Code:
$count          0;
$config_vars get_object_vars$config );
unset(
$config_vars['_db'], $config_vars['_tbl'], $config_vars['_tbl_key'], $config_vars['_error']);
$ignore      = array( '' nullfalse );
$config_keys  array_keysarray_diff$config_vars$ignore ) );
$count         count (preg_grep ('/^us_/' $config_keys));
echo 
$count//6 
Schwere Geburt, ist ja noch komplizierter als im Eingangsposting.

Grüße
Tine
tinchen ist offline  
Alt 15.03.2007, 20:59  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

@Zergling.
Ist ja wirklich Holzhammer. Aber Vorsicht. Das klappt nur mit durchgängig numerierten Attributen. Sonst it per break bei der ersten Lücke Schluß...
nikosch ist gerade online  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Welche Elemente B sind ähnlich dem Element A Anwender27 Scriptbörse 7 01.05.2008 11:45
Bestimmte elemente nur zu bestimmten Daten anzeigen lassen PHP Tipps 2005-2 3 14.07.2005 14:05
[Erledigt] XML mit PHP - alles weg bis auf die veränderten Elemente? PHP-Fortgeschrittene 2 22.06.2005 18:39
einzelne elemente eines arrays gehn verloren bei "inclu PHP Tipps 2005 2 16.03.2005 23:32
Alle dynamisch erstellen Elemente verschicken HTML, Usability und Barrierefreiheit 3 23.09.2004 15:38

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
elemente eines objekts, php elemente eines objekts, php elemente eines objektes zählen, objekte in array php zählen, mit php elemente eines objekts zählen

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:39 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.