anpera.net

anpera.net

experimental server @home
Aktuelle Zeit: Fr 26 Apr, 2019 16:58

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 36 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Re: Funktionssammlung
BeitragVerfasst: Mi 25 Feb, 2009 13:52 
Offline
Profi
Profi
Benutzeravatar

Registriert: Mo 20 Sep, 2004 23:43
Beiträge: 164
Wohnort: Berlin
LoGD: http://www.atrahor.de/source.php
HTML Cleaning

Code:
/**
 * Entfernt HTML Tags aus einem Text. Arbeitet invers zur PHP Funktion strip_tags bei der man
 * alle tags angeben muss die erhalten bleiben sollen
 *
 * @author dragonslayer für Atrahor.de Verbesserung von Salator!
 * @example strip_selected_tags($str_text,array('b','br'),false,true);
 * @param string $str Text der bearbeitet werden soll
 * @param array $tags Array der die tags enthält die entfernt werden sollen.
 *             Es dürfen keine spitzen Klammern verwendet werden
 *             Syntax: array('b','a')
 * @param bool $bool_strip_content Soll der Inhalt der Tags auch entfernt werden?
 * @param bool $bool_strip_comment Sollen Kommentare entfernt werden?
 * @return String bereinigter String
 */
function strip_selected_tags($str, $tags = array(), $bool_strip_content = false, $bool_strip_comment = false)
{
   foreach ($tags as $tag)
   {
      $str = preg_replace('%(<'.$tag.'.*?>)(.*?)(<\/'.$tag.'.*?>)%is',($bool_strip_content?'':'$2'),$str);
      $str = preg_replace('%(<'.$tag.'.*?>)%is','',$str);
   }
   //Strip comments but remember: This might destroy javascript!
   if($bool_strip_comment == true)
   {
      $str = preg_replace("%(<!--)(.*?)(-->)%is",'',$str);
   }
   return $str;
}

/**
 * internal function used by strip_selected_attributes
 *
 * @param string $str The string from which to strip the attributes
 * @return string The cleaned string
 */
function __strip_selected_attributes($str){
   global $G_remove_attributes_arr_attr;
   $str = stripslashes($str);
   $rem = implode('|',$G_remove_attributes_arr_attr);
   $str = preg_replace('/((('.$rem.')(\s*=\s*(?:".*?"|\'.*?\'|[^\'">\s]+))?)+)/i','',$str);
   return $str;
}


/**
 * Strip selected html attributes from any kind of tag
 *
 * @param string $str The string from which to strip the attributes
 * @param array $attributes contains all attributes which have to be stripped
 * Format "attribute_1","attribute_2",...,"attribute_n"
 * @return string The cleaned string
 */
function strip_selected_attributes($str, $arr_attr=array())
{
   global $G_remove_attributes_arr_attr;

   if(count($arr_attr)>0)
   {
      $G_remove_attributes_arr_attr = $arr_attr;
      return preg_replace('#<(\/?\w+)((?:\s+\w+(\s*=\s*(?:".*?"|\'.*?\'|[^\'">\s]+))?)+\s*|\s*)(\/?)>#ie',"'<$1'.__strip_selected_attributes('$2').'$4>'", $str);
   }
   else
   {
      return $str;
   }
}

Im Folgenden die Beispielfunktion mit der wir das immer aufrufen und mit der wir die ganzen Bios usw. checken

Code:
/**
 * Säubert einen String von illegalen HTML Tags und Attributen
 *
 * @param string $str_html der zu reinigende String
 */
function clean_html($str_html = '',$bool_strip_tags = true, $bool_strip_attributes = true, $bool_addslashes = true)
{
   if($bool_strip_tags)      $str_html = strip_selected_tags($str_html,array('img','script','noscript','object','embed','style','frame','iframe','a','applet','noframes','button','input','form','select','input','head','body','html','pre','code'));
   if($bool_strip_attributes)   $str_html = strip_selected_attributes($str_html,array('class','style','accesskey','background','onclick','ondblclick','onmouseover','onkeypress','onmousedown','onmouseup','onmousemove','onmouseout','onkeydown','onkeyup','onblur','onfocus','onchange','onselect','onload','onunload'));
   if($bool_addslashes)      $str_html = addstripslashes($str_html);

   return $str_html;
}

_________________
Atrahor.de
http://www.atrahor.de/ci_images.php?id=1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Funktion navStripC()
BeitragVerfasst: Do 16 Apr, 2009 17:42 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3915
Wohnort: Basel
Geschlecht: Männlich
navStripC()
Entfernt aus der angegebenen URL das Cheatschutz-Attribut zuverlässig

Code:
function navStripC($string) {
   $regexp = '/
      (?:
         (\?|&)(?:c=)
      )
      (
         [[:digit:]-[:digit:]]
      *?)
      /uUix';
   $string = preg_replace($regexp, '', $string);
   return $string;
}


Anwendung:
Code:
$url = "test.php?q=querystring&c=125-110528";
$url = navstripc($url);
echo $url; # => gibt aus:test.php?q=querystring


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Funktion allownav()
BeitragVerfasst: Do 16 Apr, 2009 17:45 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3915
Wohnort: Basel
Geschlecht: Männlich
allownav()
Fügt einen Link zur Whitelist der Navigation hinzu

Code:
function Allownav($link) {

   global $session;

   

   $session[allowednavs][$link]=true;

   $session[allowednavs][str_replace(" ", "%20", $link)]=true;

   $session[allowednavs][str_replace(" ", "+", $link)]=true;

}


Anwendung:
Mit dieser Funktion kann man Links, die zum Beispiel in Formularen auftauchen oder Links, die nicht in der Nav sind, zur Whitelist hinzufügen, also erlauben, dass der User die Seite auch aufrufen darf. Ist ein Synonym für addnav("", $link);
Code:
output('<a href="test.php">Link im Output</a>', true);
allownav("test.php");


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Funktion db_query_secure()
BeitragVerfasst: Do 16 Apr, 2009 17:51 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3915
Wohnort: Basel
Geschlecht: Männlich
db_query_secure()
Emulation einer PDO-Funktionalität für die LoGD-Wrapper

Code:
function db_query_secure($sql, $args) {
   /**
    *   db_query_secure()
    *   Eine Wrapper für mysql_query mit Vorkehrungen gegen SQL-Injections
    *   Imitiert PDO::Prepare und PDO::Execute
    *
    *   Version 1.0 vom 6. August 2008
    *
    *   © Copyright 2008 by Basilius Sauter
    *   Lizenziert unter der GNU GPL in Version 2 oder neuer
    *   Basiert auf der Originalen Funktion db_query und dem MySQL-Wrapper
    *   des Engelsreiches
    */
   
   # Verfügbarmachen einiger Variablen für die Zeitauswertung
   global $dbqueriesthishit, $dbtimethishit;
   
   # Einfügen der Argumente und maskieren derselbigen
   foreach($args as $key => $value) {
      # Maskieren von ? und : im Argument, sofern keine Zahl vorhanden ist
      if(is_int($value) === false AND is_numeric($value) === false) {
         $value = str_replace('?', '!-!QUESTION_MARK_QWERTZU!-!', $value);
         $value = str_replace(':', '!-!DOUBLE_POINT_QWERTZU!-!', $value);
      }
      
      if($key == '?' OR is_numeric($key)) {         
         if(is_int($value) OR is_float($value)) {
            # Integer und Fliesskommazahlen enthalten keine Gefährlichen Zeichen. Eine Maskierung oder das
            # Setzen in Fuss-Zeichen (') nicht notwendig und kann zu verfälschenden Resultaten führen
            $id = md5(mt_rand(0, 30000));
            $sql = preg_replace('/\?/', ":PREREPLACE_$id", $sql, 1); # preg_replace, da str_replace keine Limitationen beherrscht
            $sql = str_replace(":PREREPLACE_$id", $value, $sql);
         }
         else {
            $value = db_real_escape_string($value); # Wrapper-Funktion für mysql_real_escape_string()
            $id = md5(mt_rand(0, 30000));
            $sql = preg_replace('/\?/', ":PREREPLACE_$id", $sql, 1); # preg_replace, da str_replace keine Limitationen beherrscht
            $sql = str_replace(":PREREPLACE_$id", "'$value'", $sql);
         }
      }
      elseif(substr($key, 0, 1) == ':') {   
         if(is_int($value) OR is_float($value)) {
            # Integer und Fliesskommazahlen enthalten keine Gefährlichen Zeichen. Eine Maskierung oder das
            # Setzen in Fuss-Zeichen (') nicht notwendig und kann zu verfälschenden Resultaten führen
            $sql = str_replace($key, "$value", $sql);
         }
         else {
            $value = db_real_escape_string($value); # Wrapper-Funktion für mysql_real_escape_string()
            $sql = str_replace($key, "'".$value."'", $sql);
         }
      }
   }
   
   # Demaskieren der Platzhalter für ? und :
   $sql = str_replace('!-!QUESTION_MARK_QWERTZU!-!', '?', $sql);
   $sql = str_replace('!-!DOUBLE_POINT_QWERTZU!-!', ':', $sql);
   
   # Zeitmessung für DB-Statistik
   $dbqueriesthishit++;
   $dbtimethishit -= getmicrotime();
   
   # Funktionsname zusammensetzen
   $fname = DBTYPE."_query";
   
   # Schreiben in die Datenbank
   $res = $fname($sql, LINK);
   
   # Fehlerausgabe
   if($res === false) {
      global $session;
      if($session['user']['superuser'] >= 3) {
         printf("<pre>%s</pre>", HTMLSpecialchars($sql));
      }
      
      print db_error(LINK);
      exit;
   }
   
   # Zeitmessung für DB-Statistik
   $dbtimethishit += getmicrotime();
   
   # Rückgabe
   return $res;
}


Beschreibung
Mit dieser Funktion lassen sich einfach Queries schreiben, ohne dass man sich um die Maskierung der Attribute zu kümmern hat. Dazu werden im Query die Werte als Platzhalter notiert und im zweiten Argument als Array übergeben. Die Funktion ersetzt die Platzhalter mit den maskierten Werten und setzt, wenn der Wert keine Zahl ist, auch gleich die Anführungszeichen.
Code:
$sql = "SELECT acctid FROM accounts WHERE level = :level AND login = :loginname";
$args = array(':level' => 17, ':loginname' => 'Login"name mit p\'hösen, phö'."\n".'sen Zeichen');
$res = db_query_secure($sql, $args);


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: hasWon
BeitragVerfasst: Mi 27 Jan, 2010 18:48 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3915
Wohnort: Basel
Geschlecht: Männlich
hasWon()
"Überprüft", ob ein User (oder ein Ereignis) mit der übergebenen Chance "gewonnen" hat (Ein besserer Name ist mir nicht eingefallen :pein:).

Code:
function hasWon($chance = 0.5) {
   $randomMin = 1;
   $randomMax = 100;
   
   $a = $randomMax*pow(10, abs(ceil(log($chance, 10))) - 1);
   $b = $chance*pow(10, abs(floor(log($chance, 10))));
   
   $c = explode('.', (string)$b);
   $a = $a * pow(10, strlen($c));
   $b = $b * pow(10, strlen($c));
   
   $random = mt_rand($randomMin, $a);
   
   if($random <= $b) {
      return true;
   }
   else {
      return false;
   }
}


Anwendung:
Man übergibt dem Script eine Chance (Bruchteile von 1, 50% entspricht dabei .5) und kann dann überprüfen, ob das Ereignis eintreten soll - oder eben nicht. Hilfreich z.B. für Droplisten, wo Gegenstände mit einer gewissen Wahrscheinlichkeit erscheinen können. Die Funktion passt sich automatisch dem Argument an. Für eine Chance von 50% fragt der Generator nur eine Zufallszahl zwischen 1 und 100 nach der Meinung. Für 45% oder 5% ist es eine Zufallszah zwischen 1 und 1000, für 0.5% eine zwischen 1 und 10'000...
Code:
if(hasWon('0.05')) {
  echo "Der User gewinnt in 5% der Fälle.";
}
if(hasWon('0.45')) {
  echo "Der User gewinnt in 45% aller Fälle.";
}


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Funktionssammlung
BeitragVerfasst: Mi 05 Mai, 2010 06:15 
Offline
Freak
Freak
Benutzeravatar

Registriert: Di 01 Mai, 2007 13:57
Beiträge: 1634
Wohnort: Dortmund.
Geschlecht: Männlich
LoGD: Lokal.
Skype: josh.hoiul
insert_array()
Speichert ein Array in der Datenbank.

Code:
function insert_array( $table, $arr ) {
   
   if ( !is_array($arr) ) {
      
      return false;
   
   }
   
   $numerics = 'TINYINT SMALLINT MEDIUMINT INT BIGINT FLOAT DOUBLE DECIMAL ';
            
      foreach ( $arr as $k => $v ) {
         
         $fields .= $k.',';
         
         $selectField = db_query('SELECT '.$k.' FROM '.$table);
         $getType = mysql_field_type($selectField, 0);
         
            if ( !$getType ) {
               
               return false;
            
            }
            
            if ( substr_count($numerics, strtoupper($getType).' ') ) {
               
               $values .= $v.',';
            
            } else {
               
               $values .= "'".$v."',";
            
            }
      
      }
   
   $fields = rtrim($fields, ',');
   $values = rtrim($values, ',');
   
   db_query('INSERT INTO '.$table.' ('.$fields.') VALUES ('.$values.')');

}


Zur Anwendung ein kleines Beisp.:

Code:
$arr = array(
          'login' => 'ADMIN',
          'title' => '',
          'name' => 'ADMIN',
          'password' => md5('CHANGEME')
         );
insert_array('accounts',$arr);


Edit:

Wie ich gerade sehe gibt es so eine Funktion schon. :'| ~ Verzeihung...

_________________
Never change a running system. Bullshit! ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Funktionssammlung
BeitragVerfasst: Sa 19 Jun, 2010 19:03 
Offline
Freak
Freak
Benutzeravatar

Registriert: Di 01 Mai, 2007 13:57
Beiträge: 1634
Wohnort: Dortmund.
Geschlecht: Männlich
LoGD: Lokal.
Skype: josh.hoiul
print_array()
Die Funktion print_array gibt das angegebene Array wieder.
Code:
/**
 * print_array by MySQL
**/
function print_array( $arr, $print_lvl = false ) {
   
   global $output;
      
      if( !is_array($arr) ) {
         
         $str_out = 'Der angegebene Wert ist kein Array!';
      
      } else {
         
         $level = $print_lvl === 0 ? 0 : 4;
         
         $str_out .= '`@Array<br />'. str_pad('', ($print_lvl * 4) + ($print_lvl * $level), ' ') .'(`0<br />';
         
         foreach( $arr as $key => $val ) {
            
            if( is_array($val) ) {
               
               $str_out .= str_pad('', ($print_lvl * 4) + ($print_lvl * $level), ' ');
               $str_out .= '    `)[`0`^'.$key.'`)]`0 => '.print_array($val, $print_lvl + 1);
            
            } else {
               
               if( is_numeric($val) ) {
                  
                  $color = '`9';
                  $end = '`0';
               
               } else {
                  
                  $color = '`$\'`g';
                  $end = '`$\'';
               
               }
               
               $str_out .= str_pad('', ($print_lvl * 4) + ($print_lvl * $level), ' ');
               $str_out .= '    `)[`0`^'.$key.'`)]`0 => '.$color.$val.$end.'<br />';
            
            }
         
         }
         
         $str_out .= str_pad('', ($print_lvl * 4) + ($print_lvl * $level), ' ');
         $str_out .= '`@)`0<br />';
      
      }
      
   return $str_out;
   
}


Mittel pre (<pre>input</pre>) wird das Array lesbar!

Ein Beispiel:


Code:
$book_template = array(
                  'Book_Status' => 'Deaktiviert',
                  'Book_Author' => 'Username',
                    'Book_Update' => 0,
                    'Book_Title' => 'Titel des Buches',
                    'Book_Category' => 'Kategorie des Buches',
                    'Book_Operator' => 'Bearbeiter des Buches. (Mind. Mod oder Bücherreichmeister)',
                    'Book_Experience' => array('True' => true,'Experience' => 100, 'Ok' => array('Ok!')),
                    'Book_Text' => 'Text');
output('<pre>'.print_array($book_template).'</pre>',true);


Ausgabe:

Code:
Array
(
    [Book_Status] => 'Deaktiviert'
    [Book_Author] => 'Username'
    [Book_Update] => 0
    [Book_Title] => 'Titel des Buches'
    [Book_Category] => 'Kategorie des Buches'
    [Book_Operator] => 'Bearbeiter des Buches. (Mind. Mod oder Bücherreichmeister)'
    [Book_Experience] => Array
        (
            [True] => '1'
            [Experience] => 100
            [Ok] => Array
                (
                    [0] => 'Ok!'
                )
        )
    [Book_Text] => 'Text'
)

_________________
Never change a running system. Bullshit! ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Funktionssammlung
BeitragVerfasst: Mo 21 Jun, 2010 16:35 
Offline
Freak
Freak
Benutzeravatar

Registriert: Mi 06 Jul, 2005 19:10
Beiträge: 543
Wohnort: Bremen
Geschlecht: Männlich
LoGD: http://my-logd.com/motwd
Für alle die sich den Einbau sparen möchten: dump_item()
Eine Funktion die bereits vorhanden ist und das selbe macht.
Siehe LoGD 0.9.7 Ger3:
Code:
function dump_item($item){
    $output = '';
    if (is_array($item)) $temp = $item;
    else $temp = unserialize($item);
    if (is_array($temp)) {
        $output .= "array(" . count($temp) . ") {<blockquote>";
        while(list($key, $val) = @each($temp)) {
            $output .= "'$key' = '" . dump_item($val) . "'`n";
        }
        $output .= "</blockquote>}";
    } else {
        $output .= $item;
    }
    return $output;
}

_________________
Das schwarze Schaf der LotGD-Community, 2. platzierter, beim Giga.de Homepage-Award 2007 und 1. platzierter beim German Web Award 2008.
PC-ACTION meint: "Sehr gut" für MotWD!
Mind of the White Dragon => http://my-logd.com/motwd


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Funktionssammlung
BeitragVerfasst: Mi 23 Jun, 2010 08:34 
Offline
Freak
Freak

Registriert: So 29 Jan, 2006 09:41
Beiträge: 1927
Wohnort: Schweiz
Geschlecht: Männlich
Skype: louis.huppenbauer
Wenn wir schon dabei sind, auf bereits existierendes hinzuweisen:
Für die meisten sollten var_export mit $return-Paramter auf true genügen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Funktionssammlung
BeitragVerfasst: Mi 23 Jun, 2010 09:22 
Offline
Freak
Freak
Benutzeravatar

Registriert: Mi 06 Jul, 2005 19:10
Beiträge: 543
Wohnort: Bremen
Geschlecht: Männlich
LoGD: http://my-logd.com/motwd
Wenn man ein etwas seltsames Ergebnis bevorzugt sollte man das machen...;-)
In der Theorie mag var_export() funktionieren, aber in der Praxis kommt ein nicht sonderlich schönes Ergebnis, siehe Beispiel:

Beispiel:
Code:
$var = array('Lasagne'=>'Lecker', 'Spinat'=>'Brrrrr', 'Pizza'=>array('Thunfisch','Artischocken','Zwiebeln'), 'Zwieback'=>'Trocken');
echo var_export($var);
//Ausgabe
//array ( 'Lasagne' => 'Lecker', 'Spinat' => 'Brrrrr', 'Pizza' => array ( 0 => 'Thunfisch', 1 => 'Artischocken', 2 => 'Zwiebeln', ), 'Zwieback' => 'Trocken', )

Man achte auf das letzte Komma! Ich frage mich woher er das nimmt? Auch geht jede Formatierung flöten, da die Funktion mit einfachen "\n" und " " (Leerzeichen), versucht zu formatieren. Es ist also kontraproduktiv, dies für eine HTML-Ausgabe zu nutzen, es sei denn man ersetzt die vermeindlichen Formatierungszeichen.

Um dem ganzen hier aber noch ein wenig Sinn zu geben, hier ein funktionierendes Beispiel:
Code:
$var = array('Lasagne'=>'Lecker', 'Spinat'=>'Brrrrr', 'Pizza'=>array('Thunfisch','Artischocken','Zwiebeln'), 'Zwieback'=>'Trocken');
echo '<pre>';
print_r($var);
echo '</pre>';

/*Ausgabe:
Array
(
    [Lasagne] => Lecker
    [Spinat] => Brrrrr
    [Pizza] => Array
        (
            [0] => Thunfisch
            [1] => Artischocken
            [2] => Zwiebeln
        )

    [Zwieback] => Trocken
)
*/

_________________
Das schwarze Schaf der LotGD-Community, 2. platzierter, beim Giga.de Homepage-Award 2007 und 1. platzierter beim German Web Award 2008.
PC-ACTION meint: "Sehr gut" für MotWD!
Mind of the White Dragon => http://my-logd.com/motwd


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Funktionssammlung
BeitragVerfasst: Fr 25 Jun, 2010 21:09 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3915
Wohnort: Basel
Geschlecht: Männlich
Warum diskriminiert hier eigentlich jeder print_r() mit seinem hübschen zweiten Parameter $return, den man auf true setzen kann?

@Dom: Das Komma kommt vermutlich vom Code-Sparen - intressanterweise kann man in PHP Komma sowieso immer zusätzlich einsetzen, es ist also nicht mal falsch.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Funktionssammlung
BeitragVerfasst: Do 08 Jul, 2010 23:22 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 11 Feb, 2006 19:39
Beiträge: 596
Wohnort: Stuttgart - Waiblingen
Geschlecht: Männlich
LoGD: http://logd.legend-of-vinestra.de/source
Skype: da-chosen-one
Zitat:
Wer seine Funktionen (Und nur Funktionen!) hier hineinposten möchte: Nur zu.


array_delete()

Code:
function array_delete() {
   $args = func_get_args();
   $n = func_num_args();

   if(!is_array($args[0]))
      die('Erstes Element in array_delete() nicht vom Typ Array!!');
   else {
      $my_array = $args[0];
      $delete_array = array();

      for($i=1; $i<$n; $i++) {
         if(is_array($args[$i])) {
            foreach($args[$i] AS $var) {
               $delete_array[] = $var;
            }
         }
         else {
            $delete_array[] = $args[$i];
         }
      }
      return array_diff($my_array, $delete_array);
   }
}


Ok, wie funzt das Ding:

Code:
$arr1 = array(Banane, Zitrone, Kiwi, Apfel, Birne);

$magichnicht = array(Zitrone, Birne);

$ganzbesondersnicht = 'Kiwi';

$ichbingarnichtdabei = 'Pflaume';

$new_arr = array_delete($arr1, $magichnicht, $ganzbesondersnicht, $ichbingarnichtdabei);

// $new_arr beinhaltet nun Banane und Apfel. Pflaume wird nicht beachtet.


Wie man also sieht kann $arg1, $arg2, $arg3, etc. vom Typ array oder string sein. $arg0 muss das Array sein, aus welchem die Elemente gelöscht werden sollen.

Ich denke die Funktion erklärt sich von alleine, manchmal kann sie ganz hilfreich sein. Ich kenne keine andere Lösung um bestimmte Elemente aus einem Array zu löschen, wenn man ihre Position nicht kennt. Wenn es einen einfacheren Weg gibt (was wohl der Fall ist, weil es das immer gibt xD), dann darf man ihn mir ruhig mitteilen.

LG Draz


PS: Bevor ich es vergesse: Die Arrayschlüssel bleiben unverändert. Heißt, dass im obigen Beispiel das Array folgendermaßen aussähe: array(0 => "Banane", 3 => "Apfel");

_________________
Code:
(define-record-procedures choco-cookie
  make-choco-cookie choco-cookie?
  (choco-cookie-choco
   choco-cookie-cookie))

(define Prinzenrolle
  (make-choco-cookie choco-cookie-choco-standard (* 2 choco-cookie-cookie-standard)))


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Funktionssammlung
BeitragVerfasst: Fr 09 Jul, 2010 15:16 
Offline
Profi
Profi

Registriert: Mo 20 Apr, 2009 00:30
Beiträge: 124
Drazaar hat geschrieben:
Ich denke die Funktion erklärt sich von alleine, manchmal kann sie ganz hilfreich sein. Ich kenne keine andere Lösung um bestimmte Elemente aus einem Array zu löschen, wenn man ihre Position nicht kennt. Wenn es einen einfacheren Weg gibt (was wohl der Fall ist, weil es das immer gibt xD), dann darf man ihn mir ruhig mitteilen.

PS: Bevor ich es vergesse: Die Arrayschlüssel bleiben unverändert. Heißt, dass im obigen Beispiel das Array folgendermaßen aussähe: array(0 => "Banane", 3 => "Apfel");


Ich kann dir wirklich nur empfehlen dich mit den basics (dazu zählen array standard Funktionen) auseinanderzusetzen!

Code:
$new_arr = array_diff($arr1, $magichnicht, (array)$ganzbesondersnicht, (array)$ichbingarnichtdabei);


Liefert das gleiche Ergebnis.

Da array_diff keine Strings akzeptiert ist hier ein typecast nötig, aber immer noch einfacher, als ne unnötige Funktion.

LG,
Bathi

p.s. solltest du die keys ordnen wollen guck dir http://www.php.net/array_values an.


Zuletzt geändert von Bathory am Fr 09 Jul, 2010 15:22, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Funktionssammlung
BeitragVerfasst: Fr 09 Jul, 2010 15:20 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 11 Feb, 2006 19:39
Beiträge: 596
Wohnort: Stuttgart - Waiblingen
Geschlecht: Männlich
LoGD: http://logd.legend-of-vinestra.de/source
Skype: da-chosen-one
Hi,

ich kann dir wirklich nur empfehlen, die Funktionen die ein User hier posted, auch einmal anzuschauen. ;)

array_delete überprüft ob es sich beim Argument 1-x um einen String oder ein Array handelt. WEnn es sich um ein Array handelt, werden alle Arrayelemente zu $delete_array hinzugefügt. Ein einzelner String wird genau so zu diesem Array hinzugefügt. Am Ende wird array_diff eben mit dem Ausgangsarray und dem array $delete_array gefüttert. Es handelt sich somit bei beiden Argumenten zwangsweise immer um ein Array...

_________________
Code:
(define-record-procedures choco-cookie
  make-choco-cookie choco-cookie?
  (choco-cookie-choco
   choco-cookie-cookie))

(define Prinzenrolle
  (make-choco-cookie choco-cookie-choco-standard (* 2 choco-cookie-cookie-standard)))


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Funktionssammlung
BeitragVerfasst: Fr 09 Jul, 2010 15:25 
Offline
Profi
Profi

Registriert: Mo 20 Apr, 2009 00:30
Beiträge: 124
Drazaar hat geschrieben:
ich kann dir wirklich nur empfehlen, die Funktionen die ein User hier posted, auch einmal anzuschauen. ;)


Ich habe sie mir angeguckt und als nutzlos erklärt.

Wie gesagt reicht hier ein Typecast....

Code:
$new_arr = array_diff($arr1, $magichnicht, (array)$ganzbesondersnicht, (array)$ichbingarnichtdabei);


liefert das gleiche Ergebnis wie bei dir:

Code:
$new_arr = array_delete($arr1, $magichnicht, $ganzbesondersnicht, $ichbingarnichtdabei);



Nur das man sich den Overhead einer extra Funktion spart inkl array iteration + vergleiche is_array + speicher für ein extra array und und und...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Funktionssammlung
BeitragVerfasst: Sa 10 Jul, 2010 16:00 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 11 Feb, 2006 19:39
Beiträge: 596
Wohnort: Stuttgart - Waiblingen
Geschlecht: Männlich
LoGD: http://logd.legend-of-vinestra.de/source
Skype: da-chosen-one
Ich seh eigentlich keinen Grund mich zu rechtfertigen, aber so vielmal vorweg:
Ich habe die Funktion gemacht, weil ich es als recht nützlich in LoGD empfand, bestimmte Elemente aus einem Array zu löschen.
Da du hier irgendwas von einem Typecast rumlaberst ist ok, ich habe es verstanden. Allerdings habe ich es in Fällen angewandt, da wäre das nicht so locker flocker gegangen mit einmal (array) davorsetzen. Im Endeffekt sieht es doch so aus:
Du musst die Funktion nicht nutzen, also ist ja alles i.O.

Und eigentlich ist der Thread auch überhaupt nicht für Diskussioen / Feedback gedacht.

_________________
Code:
(define-record-procedures choco-cookie
  make-choco-cookie choco-cookie?
  (choco-cookie-choco
   choco-cookie-cookie))

(define Prinzenrolle
  (make-choco-cookie choco-cookie-choco-standard (* 2 choco-cookie-cookie-standard)))


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Funktionssammlung
BeitragVerfasst: Sa 10 Jul, 2010 17:43 
Offline
Profi
Profi

Registriert: Mo 20 Apr, 2009 00:30
Beiträge: 124
Drazaar hat geschrieben:
Ich seh eigentlich keinen Grund mich zu rechtfertigen, aber so vielmal vorweg:
Ich habe die Funktion gemacht, weil ich es als recht nützlich in LoGD empfand, bestimmte Elemente aus einem Array zu löschen.
Da du hier irgendwas von einem Typecast rumlaberst ist ok, ich habe es verstanden. Allerdings habe ich es in Fällen angewandt, da wäre das nicht so locker flocker gegangen mit einmal (array) davorsetzen. Im Endeffekt sieht es doch so aus:
Du musst die Funktion nicht nutzen, also ist ja alles i.O.

Und eigentlich ist der Thread auch überhaupt nicht für Diskussioen / Feedback gedacht.


Ich versteh dein Verhalten nicht, ich bin nur deinem Wunsch nachgekommen! :dumm:

Drazaar hat geschrieben:
Ich kenne keine andere Lösung um bestimmte Elemente aus einem Array zu löschen, wenn man ihre Position nicht kennt. Wenn es einen einfacheren Weg gibt (was wohl der Fall ist, weil es das immer gibt xD), dann darf man ihn mir ruhig mitteilen.


Ich mein wenn du nichts neues lernen willst dann sag es doch das nächste Mal direkt!

Ausserdem:

Drazaar hat geschrieben:
Allerdings habe ich es in Fällen angewandt, da wäre das nicht so locker flocker gegangen mit einmal (array) davorsetzen.


Da ich nicht dumm sterben will nenn mir einen einzigen Fall, wo das mit nem Typecast (array) + array_diff nicht funktionieren sollte, aber mit deiner Funktion schon...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Funktionssammlung
BeitragVerfasst: Sa 10 Jul, 2010 22:20 
Offline
Freak
Freak
Benutzeravatar

Registriert: Di 01 Mai, 2007 13:57
Beiträge: 1634
Wohnort: Dortmund.
Geschlecht: Männlich
LoGD: Lokal.
Skype: josh.hoiul
Das artet langsam zu einer privaten Diskussion aus. Bitte klärt das privat per PN. - Wir müssen hier nicht unbedingt mit Dreck werfen.

Daher das Thema auch eigentlich nur auf Funktionen ausgelegt ist..

_________________
Never change a running system. Bullshit! ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Funktionssammlung
BeitragVerfasst: Sa 10 Jul, 2010 22:31 
Offline
Profi
Profi

Registriert: Mo 20 Apr, 2009 00:30
Beiträge: 124
MySql hat geschrieben:
Das artet langsam zu einer privaten Diskussion aus. Bitte klärt das privat per PN. - Wir müssen hier nicht unbedingt mit Dreck werfen.

Daher das Thema auch eigentlich nur auf Funktionen ausgelegt ist..


Ich werfe hier nicht mit Dreck. :warn:

Und eine Funktionssammlung sollte Sinn ergeben.
Als Vorschlag => Sticky und geclosed Thread wo ein Mod nach Kontrolle sinnvolle Funktionen reinpostet.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Funktionssammlung
BeitragVerfasst: Mo 06 Feb, 2012 17:57 
Offline
Freak
Freak
Benutzeravatar

Registriert: Di 01 Mai, 2007 13:57
Beiträge: 1634
Wohnort: Dortmund.
Geschlecht: Männlich
LoGD: Lokal.
Skype: josh.hoiul
addComponent
Funktion der Klasse Factory - Läd, sofern Datei und Klasse vorhanden, eine Klasse.

Code:
class Factory {
   
   const Dir = 'library';
   private $components = array();
   
   public function addComponent() {
      
      $num = func_num_args();
      $args = func_get_args();
      
      if( preg_match('/\./', $args[0]) == true ) {
         
         $exp = explode('.', $args[0]);
         $count = count($exp);
         
         if( $count > 0 ) {
            
            for( $i=0; $i < $count; $i++ ) {
               
               $path .= '/'.$exp[$i];
               
            }
            
            $path .= '.php';
            $comp = $exp[$count-1];
         
         } else {
         
            $path = '/'.$exp[0].'.php';
            $comp = $exp[0];
            
         }
      
      } else {
         
         $path = '/'.$args[0].'.php';
         $comp = $args[0];
      
      }
      
      if( !file_exists(Factory::Dir.$path) ) {
         
         return ;
      
      } else {
         
         if( array_key_exists($comp, $this->components) ) {
            
            return;
         
         } else {
            
            require_once Factory::Dir.$path;
            
            if( !class_exists($comp) ) {
               
               return;
            
            } else {
                  
               unset($args[0]);
               $requiredClass = new ReflectionClass($comp);
               $class = $requiredClass->newInstanceArgs($args);
               
               return $class;
               
            }
            
            $this->components[$comp] = true;
         
         }
      
      }
   
   }

}


Nutzung:

Code:
$Factory = new Factory;

# Laden der Klasse "System"
$System = $Factory->addComponent('System');
# Die Klasse "System" hat Argumente? Dann so:
$System = $Factory->addComponent('System','Arg1','Arg2'); #etc.
# Die Klasse "System" liegt in einem weiterem Unterordner? Dann so:
$System = $Factory->addComponent('System.System', [, mixed $args ]);

# Die Klasse kann allerdings nicht doppelt geladen oder instanziert werden.
$System = $Factory->addComponent('System');
$System = $Factory->addComponent('System'); # Führt ins leere, erzeugt keinen Fehlercode.


Dazu sei gesagt dass die Datei und die Klasse den gleichen Namen tragen müssen.

Vielleicht braucht es wer, vielleicht auch nicht. Es staubte hier einfach noch vor sich her. :nene:

My.

Edit: Danke an Hartas der mich auf die Kern-Class ReflectionClass aufmerksam gemacht hat.
Update: Argumenten Schnittstelle bearbeitet und verbessert.

_________________
Never change a running system. Bullshit! ;)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 36 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Du darfst keine neuen Themen in diesem Forum erstellen
Du darfst keine Antworten zu Themen in diesem Forum erstellen
Du darfst deine Beiträge in diesem Forum nicht ändern
Du darfst deine Beiträge in diesem Forum nicht löschen
Du darfst keine Dateianhänge in diesem Forum erstellen

Suche nach:
Gehe zu:  
cron
POWERED_BY
Deutsche Übersetzung durch phpBB.de
anpera.net - Impressum