php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 24.10.2008, 16:59  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.988
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

Naja, hatte es im Kopf ja eh halb fertig. Nimmste noch array_keys () dazu ...
PHP-Code:
<?
$items 
= array ();

$array = array (8);
while (
true)
  {
  
$item array_shift ($array);
  if (empty (
$array)) break;
  
  
$items array_merge ($items array_map (null $arrayarray_fill (count ($array) , $item)));
  }
  
print_r($items);
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 24.10.2008, 17:39  
Neuer Benutzer
 
Benutzerbild von vdite
 
Registriert seit: 21.10.2008
Beiträge: 22
vdite befindet sich auf einem aufstrebenden Ast
Standard

Hi danke!
Auch wenn Dein Skript nicht mehr so richtig verstehe und das Beispiel sehr gut funktioniert bleibt das Problem der keys immer noch.

Code:
$item = array_shift ($value);
array_shift liefert hier wieder nur das value und wenn ich beim mergen der beiden Arrays den Index des Wertes($item) haben möchte, geht dies ja nicht mehr.
__________________
Hier findet Ihr alles, was ich dank eurer Hilfe geschafft habe und noch mehr: http://viskoda.viktor-dite.de
vdite ist offline  
Alt 24.10.2008, 18:05  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.988
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

PHP-Code:
myFunction (array_keys ($value)); 
Kurz zum Verständnis:
- array_shift () holt in einer Schleife stets das erste Element des Arrays (welches dabei um dieses Element reduziert wird).
- das passiert solange, bis das letzte Element entnommen wurde
- das letzte Element wird nicht mehr verarbeitet - es gib nichts mehr zuzuordnen - break;

$items = array_merge ($items , ...
erweitert das Array $items um das folgende:

array_map (null , $array1 , $array2) liefert ein Array mit n Elementen, wobei jedes Element wiederum ein Array aus je einem Eintrag aus $array1 und $array2 ist.
Gleichbedeutend:
each (array1 as key=>tmp)
result[] = { array1[key] , array2[key] }

Als zweite (Kombinations-)menge wird ein Array aus n Einträgen $item gebildet.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--

Geändert von nikosch (24.10.2008 um 18:12 Uhr).
nikosch ist offline  
Alt 24.10.2008, 19:34  
Neuer Benutzer
 
Benutzerbild von vdite
 
Registriert seit: 21.10.2008
Beiträge: 22
vdite befindet sich auf einem aufstrebenden Ast
Standard

das funktioniert jetzt soweit, allerdings bekomme ich mittels eines Kreuzprodukts weniger Elemente als mit dieser Variante?!?!
argh....das ist schon echt zu hoch für mich

Kreuzprodukt:
Code:
function makeXML($input){
   global $wgOut;
   $xmlrelation='';
	
   foreach($input as $value){
	if(count($value)>2){
		$count=$value['count'];
		unset($value['count']);

		foreach ($value as $ikey=>$ivalue){
			foreach ($value as $jkey=>$jvalue)
			{
				$xmlrelation.='<UndirectedRelation  fromID="'.$ikey.'" toID="'.$jkey.'" lineSize="'.$count.'"/>';
			}
		}
	}
   }
   $wgOut->AddWikiText('<pre>'.$xmlrelation.'</pre>');
		

}
Die Andere -- Deine Variante:
Code:
function makeXML($input){
	global $wgOut;
	$xmlnode='';
	$xmlrelation='';
	$items = array ();
	
	foreach($input as $value){
		if(count($value)>2){
			$count=$value['count'];
			unset($value['count']);
		
			$value=array_keys($value);
		
			while (true)
			{
				$item = array_shift($value);
				if (empty ($value)) break;
				$items = array_merge ($items , array_map (null , $value, array_fill (0 , count ($value) , $item)));
			}
		}
		foreach($items as $ivalue){
			$one=array_pop($ivalue);
			$two=array_pop($ivalue);
			$xmlrelation.='<UndirectedRelation  fromID="'.$one.'" toID="'.$two.'" lineSize="'.$count.'"/>
			';
		}	
	}
	$wgOut->AddWikiText('<pre>'.$xmlrelation.'</pre>');
}
oder mache ich immer noch was falsch?
__________________
Hier findet Ihr alles, was ich dank eurer Hilfe geschafft habe und noch mehr: http://viskoda.viktor-dite.de

Geändert von vdite (24.10.2008 um 19:57 Uhr).
vdite ist offline  
Alt 24.10.2008, 19:57  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.988
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

1/ Statt:
PHP-Code:
foreach($items as $ivalue){
            
$one=array_pop($ivalue);
            
$two=array_pop($ivalue);
            
$xmlrelation.='<UndirectedRelation  fromID="'.$one.'" toID="'.$two.'" lineSize="'.$count.'"/>
            '

das:
PHP-Code:
            $xmlrelation.='<UndirectedRelation  fromID="'.$items[0].'" toID="'.$items[1].'" lineSize="'.$count.'"/>
            '

2/
$items = array (); vor dem while () nicht vor foreach ()!
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
Alt 24.10.2008, 20:13  
Neuer Benutzer
 
Benutzerbild von vdite
 
Registriert seit: 21.10.2008
Beiträge: 22
vdite befindet sich auf einem aufstrebenden Ast
Standard

hatte ich auch schon gedacht, aber da kommt nur murks raus

Code:
            <UndirectedRelation  fromID="Array" toID="Array" lineSize="1"/>
            <UndirectedRelation  fromID="Array" toID="Array" lineSize="1"/>
            <UndirectedRelation  fromID="Array" toID="" lineSize="1"/>
            <UndirectedRelation  fromID="Array" toID="Array" lineSize="1"/>
            <UndirectedRelation  fromID="Array" toID="Array" lineSize="1"/>
            <UndirectedRelation  fromID="Array" toID="" lineSize="1"/>
            <UndirectedRelation  fromID="Array" toID="" lineSize="1"/>
            <UndirectedRelation  fromID="Array" toID="" lineSize="1"/>
            <UndirectedRelation  fromID="Array" toID="" lineSize="1"/>
            <UndirectedRelation  fromID="Array" toID="" lineSize="1"/>
            <UndirectedRelation  fromID="Array" toID="" lineSize="1"/>
            <UndirectedRelation  fromID="Array" toID="" lineSize="1"/>
            <UndirectedRelation  fromID="Array" toID="" lineSize="3"/>
            <UndirectedRelation  fromID="Array" toID="" lineSize="3"/>
            <UndirectedRelation  fromID="Array" toID="" lineSize="2"/>
aber wenn das foreach array_pop() lässt und das $items = array(); richtig positioniert, dann geht es!
Dankeschön!!!!!!
echt, vielen vielen dank!!!!!
Ich war schon am verzweifeln!
__________________
Hier findet Ihr alles, was ich dank eurer Hilfe geschafft habe und noch mehr: http://viskoda.viktor-dite.de
vdite ist offline  
Alt 25.10.2008, 11:32  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.988
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

Ach ja, klar:
PHP-Code:
foreach($items as $ivalue){
    
$xmlrelation.='<UndirectedRelation  fromID="'.$ivalue[0].'" toID="'.$ivalue[1].'" lineSize="'.$count.'"/>';

__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
Alt 31.12.2008, 10:18  
Neuer Benutzer
 
Benutzerbild von vdite
 
Registriert seit: 21.10.2008
Beiträge: 22
vdite befindet sich auf einem aufstrebenden Ast
Standard

So, hab es jetzt soweit fertig, vielen vielen Dank nochmal!!!!

hier ist der Quellcode, falls es jm. interessiert


Code:
<?php

$wgExtensionFunctions[] = 'showRel';


/**
 * @make a new tag <relations/>
 */
function showRel() {
        global $wgParser;
        $wgParser->setHook( "relations", "mainRel" );
        return true;
}


function mainRel($text, $params, &$parser) {
  global $wgOut;
  global $wgTitle;
  
  $cap = new Relations();
  $cap->doRelationsQuery();
  
  $graph=$cap->makeGraph($cap->my_counter($cap->maketupel($cap->users)));
  
  $output = $parser->recursiveTagParse('<graphviz renderer="neato">'.$graph.'</graphviz>');
  return $output;
  
	
}
  
class Relations{
var $users = Array();
var $ucount = Array();
var $debug=false;


function debugOut($input){
	echo '<pre>';
	print_r( $input);
	echo '</pre>';
}


//GraphViz Dataset 
function makeGraph($input){
	global $wgOut;
	$graphnode='';
	$graphrelation='';
	$graph = 'graph g{ overlap=scale; splines=true; node [height=0 style="filled", shape="ellipse", color="lightblue"];
	';
	foreach($input as $value){
		if(count($value)==3){ //Falls Tupel nicht eine einzelne Person ist
			$count=$value['count'];
			unset($value['count']);
			
			$one=array_pop($value);
			$two=array_pop($value);
			$graphrelation.=$one.' -- '.$two.' [style="setlinewidth('.$count.')"];
			';
			
		}
	}
	$graph.=$graphnode.$graphrelation.'}';
	if($this->debug) $this->debugOut($graph);
	return $graph;
}



function doRelationsQuery() {

	$dbr =& wfGetDB( DB_SLAVE );
	$res = $dbr->query('SELECT distinct rev_user, rev_user_text, rev_page FROM revision WHERE rev_minor_edit=0 AND NOT rev_user=0 order by rev_page');
	
	while($obj = $dbr->fetchObject($res)){
	
		$this->users[$obj->rev_page][$obj->rev_user]=$obj->rev_user_text;
	}	
	if ($cap->debug) $cap->debugOut($cap->users);	
	
} 

function maketupel($input)
{
  $output = array();
  foreach($input as $key => $value) //nur das value
  {
  	/* Wenn das Array ein nTupel ist, muss es zu einem 
  	 * 2er Tupel aufgebrochen werden */
  	if(count($value)>2){
  		$items = array ();
		
		
		/*
	 	 ****************************************************************
	 	 * Jedes mit jedem als Tupel
	 	 * Dieses Codefragment ist mit Hilfe des php.de Forums entstanden
	 	 * Mein besonderer Dank an nikosch!
	 	 */
		while (true)
		{
			$item = array_shift($value);
			if (empty ($value)) break;
			$items = array_merge ($items , array_map (null , $value, array_fill (0 , count ($value) , $item)));
		}
		/*
		 *****************************************************************
		 */
		 
		/*Die Tupelelemente einzeln zum neuen Array zusammenfügen*/
		foreach($items as $ivalue){
			array_push($output,$ivalue);
		}
  	}
  	else array_push($output,$value);
  }
  if ($this->debug) $this->debugOut($output);
  return $output;
}

/* 
 * **************************************************************
 * Fuer die naechsten beiden Funktionen moechte ich 
 * dem http://www.php.de Forum sehr danken!
 * Mein besonderer Dank an nikosch!
 */
 
function my_unique($input)
{
  $output = array();
  foreach($input as $key => $value)
  {
    if(!in_array($value,$output))
      $output[$key] = $input[$key];
  }
  if ($this->debug) $this->debugOut($output);
  return $output;
}

function my_counter($input)
{ // funktioniert nur mit mehrdimensionalen arrays
  $elements = $this->my_unique($input);
  foreach($elements as $key => $value)
  {
    $elements[$key]["count"] = count(array_keys($input,$value));
  }
  if ($this->debug)$this->debugOut($elements);
  return $elements;
}

/* 
 * ***************************************************************
 */
} 
?>
Hier ist eine detaillierte Beschreibung
__________________
Hier findet Ihr alles, was ich dank eurer Hilfe geschafft habe und noch mehr: http://viskoda.viktor-dite.de
vdite ist offline  
 


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
Turnierbaum aus array erstellen kingflo PHP-Fortgeschrittene 11 30.07.2008 11:32
Soapfault: Undefined Property Argi PHP-Fortgeschrittene 0 28.07.2008 11:17
[Erledigt] Einträge mit einer Foreach Schleife rausholen saitho PHP Tipps 2008 17 18.07.2008 22:46
Eindimensionales Array ohne index per foreach erstellen phpbeginner PHP Tipps 2008 4 10.03.2008 14:18
Übersicht aus mehrdimensionalem Array erzeugen Crypi PHP-Fortgeschrittene 0 30.01.2006 13:44
Array auslesen andrew22 PHP Tipps 2006 3 21.01.2006 23:06
Array Formatierung PHP Tipps 2006 3 17.01.2006 19:12
Menü mit Unterpunkten supertramp Beitragsarchiv 7 18.10.2005 22:40
Problem beim vergleichen von 2 Arrays PHP Tipps 2005-2 1 06.10.2005 14:25
(schnellere) Funktion zum Zusammenfassen von CSS PHP-Fortgeschrittene 21 08.08.2005 16:47
Sortieren von Arrays mit mehr als 2 Dimensionen (Teil 2) Buhmann PHP-Fortgeschrittene 4 12.07.2005 14:03
Array wie auslesen? PHP Tipps 2005 7 07.03.2005 11:43
[Erledigt] Mehrdimensionales Array in eindimensionales Array umwandeln PHP-Fortgeschrittene 3 03.01.2005 22:31
Abfrage mit id aus anderer Tabelle suter PHP Tipps 2004-2 15 16.12.2004 14:25

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php array_shift solange bis array leer, javascript tupel in array, php array kreuzprodukt, php array wert rausholen, javascript 2er array, php arrays foreach as distinct, php array_shift foreach, wfgetdb foreach, g javascript tupel, php array foreach value empty, php array add tupel, php bestimmten array wert rausholen, if in tupel, foreach array as value, php array aus foreach, graphviz array, array im array foreach, for each javascript value count, wgextensionfunctions foreach, array enthält tupel

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:11 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