Por exemplo, eu gostaria de criar uma matriz a partir dos elementos nesta string:
$str = 'red, green, blue ,orange';
Eu sei que você pode explodir, passar por eles e aparar:
$arr = explode(',', $str);
foreach ($arr as $value) {
$new_arr[] = trim($value);
}
Mas sinto que há uma abordagem de uma linha que pode lidar com isso. Alguma ideia?
php
explode
trim
higher-order-functions
SeanWM
fonte
fonte
Uma resposta melhorada
Resultado:
este
fonte
red
por*red*
. Um melhor pode ser / (\ s *, \ s *) + / #O seguinte também cuida dos espaços em branco no início / fim da sequência de entrada:
e este é um teste mínimo com espaços em branco em todas as posições sensíveis:
fonte
array_map
soluções regexp e produzem resultados idênticos, alguém poderia comparar seu desempenho?é assim que você substitui e explode em uma única linha de código
produzirá os resultados como
fonte
Ao combinar alguns dos princípios nas respostas existentes, criei
O raciocínio por trás disso é que encontrei um erro nesta resposta , onde se houver uma vírgula no final da string, ele retornará um elemento em branco na matriz. ie
Resulta em
Você pode corrigir isso usando PREG_SPLIT_NO_EMPTY, conforme mencionado nesta resposta, para removê-lo, mas depois que você fizer isso tecnicamente, não será necessário remover vírgulas consecutivas por meio do regex, portanto, a expressão abreviada
fonte
Você também pode fazer isso com um regex de uma linha
fonte
tente isto:
fonte
preg_replace()
não gera uma matriz a partir de uma string. Esta é a resposta certa para a pergunta errada. Votado.$list = preg_split("/\s*,\s*/", 'red, green, blue ,orange');
pequena modificação reabilita a respostaESPECIFICAMENTE para a sequência de amostra do OP, porque cada substring a ser correspondida é uma única palavra, você pode usar str_word_count () .
Código: ( Demo )
Resultado:
Isso também pode ser adaptado para substrings além de letras (e alguns hífens e apóstrofos - se você ler as letras miúdas) adicionando os caracteres necessários ao parâmetro de máscara de caractere / terceiro.
Código: ( Demo )
Resultado:
Mais uma vez, estou tratando essa questão de maneira muito restrita por causa da sequência de amostra, mas isso fornecerá a mesma saída desejada:
Código: ( Demo )
fonte
Você pode usar preg_split () para isso.
fonte
fonte
\t\n\r\0\x0B
também$ str = 'vermelho, verde, azul, laranja';
$ str = trim ($ str);
$ strArray = explode (',', $ str);
print_r ($ strArray);
fonte