Perl join()
ignoriert (überspringt) leere Array-Werte; PHPs implode()
scheinen nicht.
Angenommen, ich habe ein Array:
$array = array('one', '', '', 'four', '', 'six');
implode('-', $array);
Ausbeuten:
one---four--six
statt (IMHO das vorzuziehen):
one-four-six
Gibt es noch andere integrierte Funktionen mit dem von mir gesuchten Verhalten? Oder wird es ein Custom Jobbie sein?
join
überspringt keine undefinierten Elemente. In der Tat 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 kannjoin '-', grep !defined, ...
undefinierte Werte überspringen.grep !length,
macht leere Strings.Antworten:
Sie können verwenden
array_filter()
:Dies funktioniert natürlich nicht, wenn Sie
0
(oder einen anderen Wert, der ausgewertet wirdfalse
) in Ihrem Array haben und diesen beibehalten möchten. Aber dann können Sie Ihre eigene Rückruffunktion bereitstellen.quelle
false
und0
auch rausgeworfen werden?empty
, wie Sie es verwenden, wird auch0
undfalse
alsfalse
(und entfernen Sie es) übrigens behandeln.array_filter()
durch Standardfilter aus jedemfalse
,null
, leerer Zeichenfolge ( ‚‘) und0
.false
: leeres Array0.0
und"0"
.Ich nehme an, Sie können es nicht als integriert betrachten (da die Funktion mit einer benutzerdefinierten Funktion ausgeführt wird), aber Sie können immer array_filter verwenden .
Etwas wie:
quelle
empty
hat den gleichen Effekt wie das Übergeben eines Rückrufs. Bearbeiten: Sie müssen den Rückgabewert negieren. Andernfalls werden nur leere Elemente zurückgegeben;) (die tatsächliche Verwendungempty
wie zuvor war ebenfalls falsch)implode('-', array_filter($ary, create_function('$a', 'return $a!="";')));
Wie Sie Ihren Filter implementieren sollten, hängt nur davon ab, was Sie als "leer" betrachten.
quelle
Zu entfernen
null
,false
,empty
String aber bewahren0
, usw. Verwendung Func. 'strlen
'wird ausgegeben:
quelle
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 Sie könnten wahrscheinlich etwas in dieser Richtung tun:
quelle
Versuche dies:
quelle
Kehrt zurück
one-two-three
quelle
array_fileter()
scheint hier der akzeptierte Weg zu sein und ist wahrscheinlich immer noch die robusteste Antwort tbh.Das Folgende funktioniert jedoch auch, wenn Sie sicherstellen können, dass das Zeichen "Kleben" nicht bereits in den Zeichenfolgen der einzelnen Array-Elemente vorhanden ist (was unter den meisten praktischen Umständen gegeben wäre - andernfalls könnten Sie nicht unterscheiden der Kleber aus den tatsächlichen Daten im Array):
quelle
Versuche dies:
quelle
isset()
oder wie das Eingabearrayarray
eines der Probleme des ursprünglichen Beitrags umgeht.