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",""