web-dev-qa-db-fra.com

PHP: Scinder la chaîne en tableau, comme exploser sans délimiteur

J'ai une chaîne telle que:

"0123456789"

et besoin de diviser CHAQUE caractère dans un tableau.

J'ai pour l'enfer essayé:

explode('', '123545789');

Mais cela m’a apporté une évidence: Attention: pas de délimiteur défini dans exploser) ..

Comment pourrais-je trouver cela? Je ne vois aucune méthode, surtout une fonction

69
oni-kun
$array = str_split("0123456789bcdfghjkmnpqrstvwxyz");

str_split prend un second paramètre facultatif, la longueur du bloc (par défaut 1), afin que vous puissiez effectuer les opérations suivantes:

$array = str_split("aabbccdd", 2);

// $array[0] = aa
// $array[1] = bb
// $array[2] = cc  etc ...

Vous pouvez également accéder à certaines parties de votre chaîne en la traitant comme un tableau:

$string = "hello";
echo $string[1];

// outputs "e"
127
Erik

Qu'est-ce que vous essayez d'accomplir? Vous pouvez accéder aux caractères d'une chaîne comme un tableau:

$s = 'abcd';
echo $s[0];

impressions ' a '

19
nategood

Essaye ça:

$str = '123456789';
$char_array = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);
6
Conan

str_split peut faire l'affaire. Notez que les chaînes dans PHP peuvent être accédées comme un tableau de caractères, dans la plupart des cas, vous n'avez pas besoin de scinder votre chaîne en un "nouveau" tableau.

5
Soufiane Hassou

Voici un exemple fonctionnant avec des chaînes multi-octets (UTF-8).

$str = 'äbcd';

// PHP 5.4.8 allows null as the third argument of mb_strpos() function
do {
    $arr[] = mb_substr( $str, 0, 1, 'utf-8' );
} while ( $str = mb_substr( $str, 1, mb_strlen( $str ), 'utf-8' ) );

Cela peut également être fait avec preg_split() (preg_split( '//u', $str, null, PREG_SPLIT_NO_EMPTY )), mais contrairement à l'exemple ci-dessus, cela tourne presque aussi vite quelle que soit la taille de la chaîne, preg_split() est rapide avec petites cordes, mais beaucoup plus lente avec les grandes.

4
Danijel

Essaye ça:

$str = "Hello Friend";

$arr1 = str_split($str);
$arr2 = str_split($str, 3);

print_r($arr1);
print_r($arr2);

L'exemple ci-dessus affichera:

Array
(
    [0] => H
    [1] => e
    [2] => l
    [3] => l
    [4] => o
    [5] =>
    [6] => F
    [7] => r
    [8] => i
    [9] => e
    [10] => n
    [11] => d
)

Array
(
    [0] => Hel
    [1] => lo
    [2] => Fri
    [3] => end
)
2
Reza Roshan

Essaye ça:

    $str = '546788';
    $char_array = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);
2
Rekha
$array = str_split("$string");

cela fonctionnera plutôt bien, MAIS si vous voulez conserver les caractères spéciaux de cette chaîne et que vous voulez les manipuler, MERCI de les utiliser.

do {
    $array[] = mb_substr( $string, 0, 1, 'utf-8' );
} while ( $string = mb_substr( $string, 1, mb_strlen( $string ), 'utf-8' ) );

parce que pour certains de mes usages personnels, il s'est avéré plus fiable lorsqu'il existe un problème avec les caractères spéciaux

0
Nedzad Ganic

Si vous voulez diviser la chaîne, utilisez de préférence:

$array = str_split($string);

Lorsque vous avez le délimiteur, qui sépare la chaîne, vous pouvez essayer,

explode('' ,$string);

Où vous pouvez passer le délimiteur dans la première variable à l'intérieur de l'exploser, tel que:

explode(',',$string);
0
user3470929