PHP: Teilen Sie die Zeichenfolge in ein Array auf, wie z. B. Explodieren ohne Trennzeichen

75

Ich habe eine Zeichenfolge wie:

0123456789

und müssen JEDES Zeichen in ein Array aufteilen.

Ich zum Teufel habe es versucht:

explode('', '123545789');

Aber es gab mir das Offensichtliche: Warnung: Kein Trennzeichen in explodieren definiert) ..

Wie würde ich darauf stoßen? Ich kann keine Methode ohne weiteres sehen, insbesondere nur eine Funktion

Oni-Kun
quelle

Antworten:

133
$array = str_split("0123456789bcdfghjkmnpqrstvwxyz");

str_split verwendet einen optionalen zweiten Parameter, die Blocklänge (Standard 1), sodass Sie folgende Aktionen ausführen können:

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

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

Sie können auch Teile Ihres Strings erreichen, indem Sie ihn als Array behandeln:

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

// outputs "e"
Erik
quelle
Ah. Verpasste diese Funktion, teilte Binärzahlen auf, um sie in einem Array zu berechnen, dies funktioniert gut.
Oni-Kun
1
Was ist mit Codierung?
Kicaj
PHP versteht die Codierung nicht. Die Zeichenfolge wird nur in Bytes aufgeteilt, sodass alle Multi-Byte-Zeichen durcheinander geraten. PHP6 sollte das beheben, aber es ist nicht passiert.
BDSL
@kicaj In den Kommentaren unter php.net/mb_split sehen Sie eine von adjwilli geschriebene Funktion, die eine UTF8-Zeichenfolge in Zeichen aufteilen soll.
BDSL
19

Was versuchst du zu erreichen? Sie können wie ein Array auf Zeichen in einer Zeichenfolge zugreifen:

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

druckt ' a '

nategood
quelle
6

Versuche dies:

$str = '123456789';
$char_array = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);
Conan
quelle
Das ist wirklich unnötig und viel langsamer als str_split.
Erik
@Erik: Nicht, wenn Sie ein leeres Array zurückholen müssen, falls das $strkeine Länge hat.
hakre
@hakre In diesem Fall wäre es viel schneller, einfach eine strenge Überprüfung durchzuführen $strund festzulegen, $char_array = array()ob strlen0 zurückgegeben wird.
Travis Weston
5

str_splitkann den Trick machen. Beachten Sie, dass auf Zeichenfolgen in PHP wie auf ein Zeichen-Array zugegriffen werden kann. In den meisten Fällen müssen Sie Ihre Zeichenfolge nicht in ein "neues" Array aufteilen.

Soufiane Hassou
quelle
4

Hier ist ein Beispiel, das mit UTF-8-Zeichenfolgen (Multibyte) funktioniert.

$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' ) );

Dies kann auch mit preg_split()( preg_split( '//u', $str, null, PREG_SPLIT_NO_EMPTY )) erfolgen, ist jedoch im Gegensatz zum obigen Beispiel, das unabhängig von der Größe der Zeichenfolge fast genauso schnell ausgeführt preg_split()wird, bei kleinen Zeichenfolgen schnell, bei großen Zeichenfolgen jedoch viel langsamer.

Danijel
quelle
2

Versuche dies:

    $str = '546788';
    $char_array = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);
Rekha
quelle
2

Versuche dies:

$str = "Hello Friend";

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

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

Das obige Beispiel gibt Folgendes aus:

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
)
Reza Roshan
quelle
0

Wenn Sie die Zeichenfolge teilen möchten, verwenden Sie am besten Folgendes:

$array = str_split($string);

Wenn Sie ein Trennzeichen haben, das die Zeichenfolge trennt, können Sie Folgendes versuchen:

explode('' ,$string);

Wo Sie das Trennzeichen in der ersten Variablen innerhalb der Explosion übergeben können, wie z.

explode(',',$string);
user3470929
quelle
0
$array = str_split("$string");

wird tatsächlich ziemlich gut funktionieren, ABER wenn Sie die Sonderzeichen in dieser Zeichenfolge beibehalten möchten und einige Manipulationen mit ihnen vornehmen möchten, als ich verwenden würde

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

weil es sich für einige meiner persönlichen Zwecke als zuverlässiger erwiesen hat, wenn es ein Problem mit Sonderzeichen gibt

Nedzad Ganic
quelle