Como posso dividir uma string delimitada por vírgula em uma matriz no PHP?

263

Eu preciso dividir minha entrada de seqüência de caracteres em uma matriz nas vírgulas.

Como posso realizar isso?

Entrada:

9,admin@example.com,8
Kevin
fonte
8
Apenas uma observação: as pessoas estão votando contra você por causa da quantidade mínima de informações e de perguntas mal formuladas.
Troggy 14/07/2009
@Troggy - durante a minha edição eu definidos para alterá-lo para legíveis Inglês, mas então eu percebi que provavelmente apenas ser uma duplicata de muitas outras questões
John Rasch
3
Nenhuma pergunta é muito básica, mas você pode considerar dar uma olhada nas funções do manipulador de strings. Não é uma pergunta ruim, mas encontrar algo nos documentos é bom e às vezes mais rápido.
Csaba Kétszeri

Respostas:

553

Tente explodir :

$myString = "9,[email protected],8";
$myArray = explode(',', $myString);
print_r($myArray);

Resultado :

Array
(
    [0] => 9
    [1] => admin@example.com
    [2] => 8
)
Matthew Groves
fonte
1
Como você pode contar? .lengh?
delive
2
Uma maneira é usar count () (aka sizeof) - php.net/manual/en/function.count.php
Matthew Groves
2
@McLosysCreative Você também pode gostar do var_dumpque fornece informações mais detalhadas. Ainda mais útil é var_export($myArray, true)porque ele retorna a saída var_dumpcomo uma string para que você pode armazená-lo em algum log sem quebrar site gerado ...
Tomasz Kapłoński
58
$myString = "9,[email protected],8";
$myArray = explode(',', $myString);
foreach($myArray as $my_Array){
    echo $my_Array.'<br>';  
}

Resultado

9
admin@example.com
8
Jakir Hossain
fonte
1
Seu loop no final não estava diretamente relacionado à pergunta, mas era relevante para o meu problema. Obrigado por isso!
Jesse Steele
30

Se essa string vier de um arquivo csv, eu usaria fgetcsv()(ou str_getcsv()se você tiver o PHP V5.3). Isso permitirá que você analise os valores entre aspas corretamente. Se não for um CSV, explode()deve ser a melhor escolha.

soulmerge
fonte
2

Código:

$string = "9,[email protected],8";

$array  = explode(",", $string);

print_r($array);

$no = 1;
foreach ($array as $line) {
    echo $no . ". " . $line . PHP_EOL;
    $no++;
};

Conectados:

body, html, iframe { 
  width: 100% ;
  height: 100% ;
  overflow: hidden ;
}
<iframe src="https://ideone.com/pGEAlb" ></iframe>

antelove
fonte
0

De maneira simples, você pode ir com explode($delimiter, $string);

Mas de uma maneira ampla, com a Programação Manual:

        $string = "ab,cdefg,xyx,ht623";
        $resultArr = [];
        $strLength = strlen($string);
        $delimiter = ',';
        $j = 0;
        $tmp = '';
        for ($i = 0; $i < $strLength; $i++) {
            if($delimiter === $string[$i]) {
                $j++;
                $tmp = '';
                continue;
            }
            $tmp .= $string[$i];
            $resultArr[$j] = $tmp;
        }

Outpou: print_r($resultArr);

Array
(
    [0] => ab
    [1] => cdefg
    [2] => xyx
    [3] => ht623
)
Gautam Rai
fonte
0

A melhor opção é usar a função "explodir ()".

$content = "dad,fger,fgferf,fewf";
$delimiters =",";
$explodes = explode($delimiters, $content);

foreach($exploade as $explode) {
    echo "This is a exploded String: ". $explode;
}

Se você deseja uma abordagem mais rápida, pode usar uma ferramenta de delimitador como Delimiters.co Existem muitos sites como este. Mas eu prefiro um código PHP simples.

Mark William
fonte
0

explode tem alguns problemas muito grandes no uso na vida real:

count(explode(',', null)); // 1 !! 
explode(',', null); // [""] not an empty array, but an array with one empty string!
explode(',', ""); // [""]
explode(',', "1,"); // ["1",""] ending commas are also unsupported, kinda like IE8

é por isso que eu prefiro preg_split

preg_split('@,@', $string, NULL, PREG_SPLIT_NO_EMPTY)

todo o padrão:

/** @brief wrapper for explode
 * @param string|int|array $val string will explode. '' return []. int return string in array (1 returns ['1']). array return itself. for other types - see $as_is
 * @param bool $as_is false (default): bool/null return []. true: bool/null return itself.
 * @param string $delimiter default ','
 * @return array|mixed
 */
public static function explode($val, $as_is = false, $delimiter = ',')
{
    // using preg_split (instead of explode) because it is the best way to handle ending comma and avoid empty string converted to ['']
    return (is_string($val) || is_int($val)) ?
        preg_split('@' . preg_quote($delimiter, '@') . '@', $val, NULL, PREG_SPLIT_NO_EMPTY)
        :
        ($as_is ? $val : (is_array($val) ? $val : []));
}
oriadam
fonte