Perl join()
ignora (omite) valores de matriz vacíos; PHPimplode()
no parece.
Supongamos que tengo una matriz:
$array = array('one', '', '', 'four', '', 'six');
implode('-', $array);
rinde:
one---four--six
en lugar de (en mi humilde opinión, lo preferible):
one-four-six
¿Algún otro incorporado con el comportamiento que estoy buscando? ¿O será un jobbie personalizado?
join
no omite elementos indefinidos. De hecho, resultan en una advertencia.$a[0]="a"; $a[2]="c"; say join "-",@a;
muestraUse of uninitialized value within @a in join or string
ya--c
. Se puede usarjoin '-', grep !defined, ...
para omitir valores indefinidos.grep !length,
Hará cadenas vacías.Respuestas:
Puede utilizar
array_filter()
:Obviamente, esto no funcionará si tiene
0
(o cualquier otro valor que evalúefalse
) en su matriz y desea conservarlo. Pero luego puede proporcionar su propia función de devolución de llamada.fuente
false
, y0
también se desechan?empty
, a medida que lo use, también lo tratará0
yfalse
comofalse
(y lo eliminará) por cierto.array_filter()
mediante filtros por defecto fuera de cadafalse
,null
, cadena vacía ( '') y0
.false
: matriz vacía0.0
y"0"
.Supongo que no puede considerarlo integrado (porque la función se ejecuta con una función definida por el usuario), pero siempre puede usar array_filter .
Algo como:
fuente
empty
tiene el mismo efecto que no pasar ninguna devolución de llamada. Editar: tienes que negar el valor de retorno. De lo contrario, solo se devolverán los elementos vacíos;) (en realidad, usarempty
como lo hizo antes también fue incorrecto)implode('-', array_filter($ary, create_function('$a', 'return $a!="";')));
La forma en que debe implementar su filtro solo depende de lo que vea como "vacío".
fuente
Para quitar
null
,false
,empty
cadena, pero preservar0
, etc. uso func. 'strlen
'dará salida:
fuente
Según lo que puedo encontrar, diría que lo más probable es que realmente no haya ninguna forma de usar un PHP integrado para eso. Pero probablemente podrías hacer algo como esto:
fuente
Prueba esto:
fuente
Devoluciones
one-two-three
fuente
array_fileter()
parece ser la forma aceptada aquí, y probablemente sigue siendo la respuesta más robusta por cierto.Sin embargo, lo siguiente también funcionará si puede garantizar que el carácter "pegamento" no existe ya en las cadenas de cada elemento de la matriz (lo que sería un hecho en la mayoría de las circunstancias prácticas; de lo contrario, no podría distinguir el pegamento de los datos reales en la matriz):
fuente
Prueba esto:
fuente
isset()
o convertir la matriz de entrada comoarray
aborda alguna de las preocupaciones de la publicación original.