Irgendwelche anderen eingebauten Funktionen mit dem Verhalten, nach dem ich suche? Oder wird es ein Custom-Jobbie?
Sie liegen falsch mit dem Verhalten von Perl. join überspringt keine undefinierten Elemente. Tatsächlich führen sie zu einer Warnung. $a[0]="a"; $a[2]="c"; say join "-",@a; zeigt Use of uninitialized value within @a in join or string und a--c. Man kann verwenden join '-', grep !defined, ... um undefinierte Werte zu überspringen. grep !length, wird leere Zeichenfolgen tun.
Wenn nein zurückrufen geliefert wird, alle Einträge von Eingang gleicht FALSE (sehen Umwandlung in Boolean) werden entfernt.
implode('-', array_filter($array));
Offensichtlich wird dies nicht funktionieren, wenn Sie haben 0 (oder jeder andere Wert, der ausgewertet wird false) in Ihrem Array und Sie möchten es behalten. Aber dann können Sie Ihre eigene Callback-Funktion bereitstellen.
Soll das heißen falseund 0 werden auch rausgeschmissen?
– Jess
12. Mai 2011 um 22:54 Uhr
@maz: Ja, aber Sie können jederzeit Ihren eigenen Rückruf bereitstellen. emptywie Sie es verwenden, wird auch behandeln 0 und false wie false (und entfernen) btw.
– Felix Klinge
12. Mai 2011 um 22:55 Uhr
+1, aber es muss erwähnt werden, dass array_filter() standardmäßig filtert alle aus false, nullleerer String (”) und 0.
– Tadeck
12. Mai 2011 um 22:55 Uhr
@Tadeck: Ja, folge einfach dem Link im Zitat. Noch mehr Werte werden als berücksichtigt false: leeres Array, 0.0 und "0".
– Felix Klinge
12. Mai 2011 um 22:58 Uhr
@Felix: Ich wusste es – wollte es nur für Leute betonen, die neu in PHP sind;) Wie auch immer: Danke
– Tadeck
12. Mai 2011 um 23:05 Uhr
Jess
Ich nehme an, Sie können es nicht als eingebaut betrachten (weil die Funktion mit einer benutzerdefinierten Funktion ausgeführt wird), aber Sie könnten es immer verwenden array_filter.
Etwas wie:
Verwenden empty hat den gleichen Effekt, als würde überhaupt kein Rückruf übergeben. Bearbeiten: Sie müssen den Rückgabewert negieren. Andernfalls werden nur leere Elemente zurückgegeben 😉 (eigentlich using empty wie Sie es zuvor getan haben, war auch falsch)
– Felix Klinge
12. Mai 2011 um 23:03 Uhr
Ja, das ist rückständig. Aber du hast mich auf die richtige Idee gebracht implode('-', array_filter($ary, create_function('$a', 'return $a!="";')));
– Tom Auger
12. Mai 2011 um 23:12 Uhr
Ali Varli
Zu entfernen null, false, empty Saite aber bewahren 0usw. benutze func. ‘strlen‘
Basierend auf dem, was ich finden kann, würde ich sagen, dass es wahrscheinlich keine Möglichkeit gibt, ein dafür eingebautes PHP zu verwenden. Aber du könntest wahrscheinlich etwas in dieser Richtung tun:
Sie liegen falsch mit dem Verhalten von Perl.
join
überspringt keine undefinierten Elemente. Tatsächlich führen sie zu einer Warnung.$a[0]="a"; $a[2]="c"; say join "-",@a;
zeigtUse of uninitialized value within @a in join or string
unda--c
. Man kann verwendenjoin '-', grep !defined, ...
um undefinierte Werte zu überspringen.grep !length,
wird leere Zeichenfolgen tun.– Ikegami
12. Mai 2011 um 23:01 Uhr