[php] PHP-문자열 문자 반복

문자열의 문자를 반복하는 좋은 방법이 있습니까? 나는 할 수 있도록하고 싶습니다 foreach, array_map, array_walk, array_filter문자열의 문자에 등.

타입 캐스팅 / 저글링은 저를 어디에도 가지지 못했습니다 (전체 문자열을 배열의 한 요소로 넣음). 내가 찾은 최고의 솔루션은 단순히 for 루프를 사용하여 배열을 구성하는 것입니다. 더 나은 것이 있어야 할 것 같습니다. 색인을 생성 할 수 있다면 반복 할 수 없어야하지 않나요?

이것은 내가 가진 최고입니다

function stringToArray($s)
{
    $r = array();
    for($i=0; $i<strlen($s); $i++)
         $r[$i] = $s[$i];
    return $r;
}

$s1 = "textasstringwoohoo";
$arr = stringToArray($s1); //$arr now has character array

$ascval = array_map('ord', $arr);  //so i can do stuff like this
$foreach ($arr as $curChar) {....}
$evenAsciiOnly = array_filter( function($x) {return ord($x) % 2 === 0;}, $arr);

다음 중 하나가 있습니까?

A) 문자열을 반복 가능하게 만드는 방법
B) 문자열 에서 문자 배열을 만드는 더 좋은 방법 (그렇다면 다른 방향은 어떻습니까?)

나는 여기서 명백한 것을 놓친 것 같습니다.



답변

1 단계 :str_split 함수를 사용하여 문자열을 배열로 변환

$array = str_split($your_string);

2 단계 : 새로 생성 된 배열 반복

foreach ($array as $char) {
 echo $char;
}

자세한 내용은 PHP 문서를 확인할 수 있습니다. str_split


답변

반복 문자열 :

for ($i = 0; $i < strlen($str); $i++){
    echo $str[$i];
}


답변

문자열이 유니 코드 인 경우 수정 자 preg_split와 함께 사용해야합니다./u

PHP 문서의 주석에서 :

function mb_str_split( $string ) {
    # Split at all position not after the start: ^ 
    # and not before the end: $ 
    return preg_split('/(?<!^)(?!$)/u', $string );
} 


답변

$ s1에만 액세스해야하는 경우 배열처럼 $ s1에 액세스 할 수도 있습니다.

$s1 = "hello world";
echo $s1[0]; // -> h


답변

@SeaBrightSystems 답변에서 확장하면 다음을 시도해 볼 수 있습니다.

$s1 = "textasstringwoohoo";
$arr = str_split($s1); //$arr now has character array


답변

PHP에서 문자열을 반복하는 가장 빠른 방법을 찾고있는 사람들을 위해 Ive는 벤치 마크 테스트를 준비했습니다.
괄호 안에 위치를 지정하고 문자열을 배열처럼 처리하여 문자열 문자에 직접 액세스하는 첫 번째 방법 :

$string = "a sample string for testing";
$char = $string[4] // equals to m

후자가 가장 빠른 방법이라고 생각했지만 틀 렸습니다.
두 번째 방법과 마찬가지로 (허용되는 답변에 사용됨) :

$string = "a sample string for testing";
$string = str_split($string);
$char = $string[4] // equals to m

이 방법은 우리가 실제 배열을 사용 하고 하나가 배열이라고 가정하지 않기 때문에 더 빠를 것 입니다.

1000000시간 에 대해 위의 각 메서드의 마지막 줄을 호출하면 다음과 같은 벤치마킹 결과가 나타납니다.

string [i] 사용
0.24960017204285 Seconds

str_split 사용
0.18720006942749 Seconds

즉, 두 번째 방법이 훨씬 빠릅니다.


답변

흠 … 복잡 할 필요는 없습니다. 기본은 항상 훌륭하게 작동합니다.

    $string = 'abcdef';
    $len = strlen( $string );
    $x = 0;

앞으로 방향 :

while ( $len > $x ) echo $string[ $x++ ];

출력 : abcdef

역방향 :

while ( $len ) echo $string[ --$len ];

출력 : fedcba