Pergunta

Sou um Php Noob (completo) e preciso de uma pequena ajuda com alguma coisa.

Estou trabalhando em um projeto pelo qual um usuário pode selecionar até 6 categorias por meio de um formulário (estou usando o ExpressionEngine). A saída é assim:

"Cat1","Cat2","Cat3"

...e assim por diante. O usuário pode selecionar até 6 categorias nesse formulário.

O que eu preciso: mesmo que meu resultado seja 3 categorias, preciso ter 6 'células' - por falta de uma palavra melhor - mesmo que estejam vazias:

"Cat1","Cat2","Cat3","","",""

Eu tentei o seguinte:

<?php
$str = '(output goes here)';
print_r(explode(',', $str, 6));
?>

... mas a saída me dê:

Array
(
[0] => Cat1
[1] => Cat2
[2] => Cat3
[3] =>
[4] =>
[5] =>

)

Como faço para conseguir isso para isso:

"Cat1","Cat2","Cat3","","",""

Isso faz sentido?

Obrigado Martin

Nenhuma solução correta

Outras dicas

Se você tem uma matriz que contém 6 itens, incluindo 3 strings vazios:

$arr = array('cat1', 'cat2', 'cat3', '', '', '');

Você pode implode Aqueles em uma corda, desta forma:

echo '"' . implode('","', $arr) . '"';

E você obterá a seguinte saída:

"cat1","cat2","cat3","","",""


Basicamente, implode permite que você coloque todos os itens da matriz em uma corda, usando um separador - aqui, o separador é "," que é o que você pode entre suas cordas.

E, como implodia apenas colocar o separador entre os elementos, temos que colocar uma adição " no início e no final da sequência resultante.


(Espero ter entendido o que você quis dizer ...)



Edite após o comentário:

OK, se o seu $arr Array não contém seis itens no início:

$arr = array('cat1', 'cat2', 'cat3');

Uma possibilidade poderia ser criar uma matriz com elementos vazios; assim, por exemplo:

$count = count($arr);

// Create an array with empty elements
$padding = array_fill($count, 6-$count, '');
var_dump($padding);

E então, adicione -os ao $arr variedade :

// Add the empty elements to $arr
$arr = $arr + $padding;

(Você também pode usar array_merge, Eu suponho)

E agora, de volta ao nosso implode :

echo '"' . implode('","', $arr) . '"';

E desta vez novamente, você receberá:

"cat1","cat2","cat3","","",""


Aqui está o que o var_dump($padding); Dá, para obter informações:

array
  3 => string '' (length=0)
  4 => string '' (length=0)
  5 => string '' (length=0)

E, sim, você pode usar o + operador com matrizes (citando) :

o + O operador anexa elementos das teclas restantes da matriz à direita para a esquerda, enquanto as teclas duplicadas não são substituídas.


Se seu $arr Pode ser mais de 6 elementos, você pode usar array_slice Para remover os elementos não procurados:

$arr = array('cat1', 'cat2', 'cat3', '', '', '', '');
$arr = array_slice($arr, 0, 6);
echo '"' . implode('","', $arr) . '"';

Podes tentar:

$org = '"Cat1","Cat2","Cat3"';
$arr = explode(',',$org);
$arr = array_merge($arr,array_fill(count($arr),6-count($arr),'""'));
$str = implode(',',$arr);
echo($str); // prints "Cat1","Cat2","Cat3","","",""

Funciona mesmo quando $org tem 6 ou menos gatos:

Se $org = "Cat1","Cat2","Cat3","cat4","cat5"

$str vai ser "Cat1","Cat2","Cat3","cat4","cat5",""

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top