kostenloser Webspace werbefrei: lima-city


Array Items in Kategorie zählen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    webclub

    webclub hat kostenlosen Webspace.

    Hallo

    ich habe ein multidimensionales Array mit der Struktur in etwa so:

    [0] 
    --> [id]  --> (Wert) 
    --> [titel]   --> (Wert) 
    --> [kategorie]   --> (Wert) 
    ... 
    [1] 
    --> [id]   --> (Wert) 
    --> [titel]   --> (Wert) 
    --> [kategorie]   --> (Wert) 
    ... 
    [2] 
    ...



    Die Liste der Kategorien hab ich vorher leider nicht in einem Extra-Array
    Ich weiss vorher nicht wieviele Kategorien es sind, auch nicht deren Bezeichnung.

    Wie kann ich die Anzahl der Artikel je Kategorie ermitteln / zählen ?
    Am liebsten so, dass ich je Kategorie ein neues Array bekomme.
    bitte ein Code-Beispiel ... DANKE!



  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Items der jeweiligen Kategorie zählen sollte in etwa so funktionieren:

    $array = array(
    	0 => array (
    		'id' => '1', 
    		'titel' => 'TestA', 
    		'kategorie' => 'test1'
    	),
    	1 => array (
    		'id' => '2', 
    		'titel' => 'TestB', 
    		'kategorie' => 'test1'
    	),
    	2 => array (
    		'id' => '3', 
    		'titel' => 'TestC', 
    		'kategorie' => 'test2'
    	)
    );
    
    $ai = new AppendIterator;
    $ai->append(new RecursiveIteratorIterator(new RecursiveArrayIterator($array)));
    
    $counters = array();
    foreach($ai as $key=>$value) {
    	if ('kategorie' === $key ) {
    		$counters[$value] += 1;
    	}
    }
    
    echo '<pre>';
    print_r($counters);
    echo '</pre>';


    Oder so:

    $array = array(
    	0 => array (
    		'id' => '1', 
    		'titel' => 'TestA', 
    		'kategorie' => 'test1'
    	),
    	1 => array (
    		'id' => '2', 
    		'titel' => 'TestB', 
    		'kategorie' => 'test1'
    	),
    	2 => array (
    		'id' => '3', 
    		'titel' => 'TestC', 
    		'kategorie' => 'test2'
    	)
    );
    
    $counters = array();
    foreach ($array as $item) {
    	$kategorie = $item['kategorie'];
    	
    	if (!isset($counters[$kategorie])) {
    		$counters[$kategorie] = 0;
    	}
    	
    	$counters[$kategorie]++;
    }
    
    echo '<pre>';
    print_r($counters);
    echo '</pre>';


    Beitrag zuletzt geändert: 5.5.2011 15:27:11 von fabo
  4. Autor dieses Themas

    webclub

    webclub hat kostenlosen Webspace.

    danke, funktioniert ja super, ... edit ... beide Varianten,


    jetzt habe ich noch das Problem, dass es auch Unter-Kategorien gibt

    diese werden im Wert von [kategorie] durch einen Trenner zur Hauptkategorie angehängt

    BSP:
    ...
    $array[1[kategorie] = "KFZ - Auto"
    $array[2[kategorie] = "KFZ - Motorrad"
    $array[3[kategorie] = "KFZ - Nutzfahrzeug"
    ...

    also Trenner ist hier - (Minus mit Leerzeichen davor und danach)

    ne Idee, wie ich sowas am besten ordnen / sortieren kann?

    vielleicht mit ...
    if (preg_match($trenner,$katekorie) ) {
    $tmpkat = explode($trenner,$katekorie);
    $hauptkat = $tmpkat[0];
    $subkat = $tmpkat[1];
    }
    else {
    $hauptkat = $katekorie; // keine Sub-Kategorie vorhanden
    }


    Danke


    Beitrag zuletzt geändert: 5.5.2011 15:54:25 von webclub
  5. Wie wärs mit arsort(), krsort() oder rsort()?

    EDIT:

    Okay jetzt hab ich das Problem verstanden :D Ich überleg mir was...

    EDIT:

    Meinst du das so?

    $array = array(
    	0 => array (
    		'id' => '1', 
    		'titel' => 'TestA', 
    		'kategorie' => 'KFZ - Motorrad'
    	),
    	1 => array (
    		'id' => '2', 
    		'titel' => 'TestB', 
    		'kategorie' => 'KFZ - Auto'
    	),
    	2 => array (
    		'id' => '3', 
    		'titel' => 'TestC', 
    		'kategorie' => 'KFZ - Nutzfahrzeug'
    	)
    );
    
    $ai = new AppendIterator;
    $ai->append(new RecursiveIteratorIterator(new RecursiveArrayIterator($array)));
    
    $counters = array();
    foreach($ai as $key=>$value) {
    	if ('kategorie' === $key ) {
    		$kategorien = explode(' - ', $value);
    
    		if(isset($kategorien[1])) {
    			$counters[$kategorien[1]] += 1;
    		}
    		else {
    			$counters[$kategorien[0]] += 1;
    		}
    	}
    }
    
    ksort($counters);
    
    echo '<pre>';
    print_r($counters);
    echo '</pre>';


    Beitrag zuletzt geändert: 5.5.2011 16:30:26 von fabo
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!