PHP rocks! wünscht allen Mitgliedern einen guten Rutsch ins neue Jahr 2017 !!!
Hinweis: Das Forum zieht um! Um keine Datenverluste zu haben, schalten wir zwecks Übernahme der Daten das Forum am Sonntag, den 24.04.2016 um ca. 21:00 Uhr offline und passen anschliessend die DNS-Einträge an.
www.php-rocks.de wird euch dann nach den Aktualisierungen der DNS-Server wieder wie gewohnt uneingeschränkt zur Verfügung stehen.
Danke für euer Verständnis!

Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
create_function ersetzen
#1
Hallo zusammen,

Ich habe hier ein Script das
Code:
create_function
nutzt,diese wird als deprecated angezeigt.

Da ich nicht so viel Ahnung von PHP habe, wollte ich hier im Forum nachfragen, ob mir jemand einen Lösungsweg aufzeigen kann, habe zwar schon Stunden mit Google und Lösungsvorschlägen verbracht, aber leider führt keiner zum Erfolg, das liegt wohl auch daran, dass ich nicht alle Zusammenhänge verstehe.


PHP-Code:
function make_array_from_list($theList){
 if (
$theList != '') {
 
$aList explode(','$theList);
 if (
count($aList) > 0) {
 
array_walk($aListcreate_function('&$v,$k','$v = (trim( $v ) != "") ? strtolower( trim( $v ) ) : false;')); // Leerzeichen im auszuschließende-Ordner-Array entfernen
 
$aList array_unique$aList ); // doppelte Einträge entfernen
 
return array_filter($aList);
 }
 }
 return array();


Vielen Dank schon mal im voraus
zrx1100
Antworten
#2
Hallo,

Ohne es getestet zu haben, denke ich aber, dass Du das array_walk gar nicht benötigst.
Du kannst array_filter mit zwei Parametern aufrufen, wobei der zweite eine Callback-Function ist, bspw:
PHP-Code:
return array_filter$aList'trim' ); 

Das sollte für das, was Du vorhast eigentlich reichen, wenn ich das richtig überblicke.
Ansonsten kannst Du anstelle des Callback bei array_filter auch eine Anonyme Funktion verwenden.

Gruß Arne
Antworten
#3
Ergänzend:
(07.04.2018, 04:04)zrx1100 schrieb: Ich habe hier ein Script das
Code:
create_function
nutzt,diese wird als deprecated angezeigt.

Da ich nicht so viel Ahnung von PHP habe, wollte ich hier im Forum nachfragen, ob mir jemand einen Lösungsweg aufzeigen kann, habe zwar schon Stunden mit Google und Lösungsvorschlägen verbracht, aber leider führt keiner zum Erfolg, das liegt wohl auch daran, dass ich nicht alle Zusammenhänge verstehe.

Seit PHP-Version 5.3 darfst du Function-Literale benutzen. Die machen (für deine Zwecke) das Gleiche wie create_function(), aber du darfst Parameter und Body so wie in einer gewöhnlichen Funktionsdeklaration niederschreiben. Das Einbetten in Zeichenketten entfällt. Aus
PHP-Code:
$anonymousFunction create_function(
    
'$arg0, $arg1',
    
'// do something useful'
); 
wird
PHP-Code:
$anonymousFunction = function ($arg0$arg1) {
    
// do something useful
}; 
In deinem Fall könnte das "verbesserte" Codeteilstück so aussehen:

PHP-Code:
function (& $v$k) {
    
$v trim($v) !== '' 
        
strtolower(trim($v)) 
        : 
false;   

... wobei sich die gesamte Funktion make_array_from_list() anderweitig sicher noch verbessern ließe.
Antworten
#4
Hallo Arne

Vielen Dank für diesen Denkansatz, hab es nicht ausprobiert, da ich nicht genau wusste, wo ich diesen Codeschnipsel einsetzen sollte. Sad

Hallo fireweasel

Vielen Dank für diesen Codeschnipsel, habe es eingesetzt und es funktioniert einwandfrei. Smile


Danke für diese super Unterstützung, das ist nicht immer selbstverständlich.

Gruß
zrx1100
Antworten
#5
Hallo,

Ich glaube, das Verhalten, das Du willst, erreichst Du wesentlich unkomplizierter:
PHP-Code:
function ArrayFromStringList$strlist$delimiter=',' ) {

    
$aList explode$delimiter$strlist );
    return 
array_filter$aList'trim' );


In Anwendung:
PHP-Code:
$aFromList ArrayFromStringList'foo,bar' );  // array( [0] => 'foo', [1] => 'bar' )
$aFromList ArrayFromStringList'foo' );      // array( [0] => 'foo' )
$aFromList ArrayFromStringList'' );         // array() 
Antworten


Gehe zu: