Perl's join()
ignora (pula) valores de array vazios; PHP implode()
não parece.
Suponha que eu tenha uma matriz:
$array = array('one', '', '', 'four', '', 'six');
implode('-', $array);
rendimentos:
one---four--six
em vez de (IMHO o preferível):
one-four-six
Algum outro built-in com o comportamento que estou procurando? Ou será um jobbie personalizado?
join
não pula elementos indefinidos. Na verdade, eles resultam em um aviso.$a[0]="a"; $a[2]="c"; say join "-",@a;
exibeUse of uninitialized value within @a in join or string
ea--c
. Pode-se usarjoin '-', grep !defined, ...
para pular valores indefinidos.grep !length,
fará strings vazias.Respostas:
Você pode usar
array_filter()
:Obviamente, isso não funcionará se você tiver
0
(ou qualquer outro valor que avalie comofalse
) em seu array e quiser mantê-lo. Mas então você pode fornecer sua própria função de retorno de chamada.fonte
false
, e0
também são jogados fora?empty
, conforme você o usa, também tratará0
efalse
comofalse
(e removerá) aliás.array_filter()
por filtros padrão fora de cadafalse
,null
, string vazia ( '') e0
.false
: array vazio0.0
e"0"
.Suponho que você não possa considerá-lo integrado (porque a função está sendo executada com uma função definida pelo usuário), mas você sempre pode usar array_filter .
Algo como:
fonte
empty
tem o mesmo efeito que não passar nenhum retorno de chamada. Edit: Você tem que negar o valor de retorno. Caso contrário, apenas elementos vazios serão retornados;) (usarempty
como você fez antes também estava errado)implode('-', array_filter($ary, create_function('$a', 'return $a!="";')));
Como você deve implementar seu filtro depende apenas do que você vê como "vazio".
fonte
Para remover
null
, stringfalse
,empty
mas preservar0
, etc., use func. 'strlen
'irá produzir:
fonte
Com base no que posso encontrar, eu diria que provavelmente não há nenhuma maneira de usar um PHP embutido para isso. Mas você provavelmente poderia fazer algo mais ou menos assim:
fonte
Experimente isto:
fonte
Devoluções
one-two-three
fonte
array_fileter()
parece ser a forma aceita aqui, e provavelmente ainda é a resposta mais robusta tbh.No entanto, o seguinte também funcionará se você puder garantir que o caractere "cola" ainda não existe nas strings de cada elemento do array (o que seria um dado na maioria das circunstâncias práticas - caso contrário, você não seria capaz de distinguir a cola dos dados reais na matriz):
fonte
Experimente isto:
fonte
isset()
ou converter a matriz de entrada comoarray
aborda qualquer uma das preocupações do post original?