Строка преобразуется в массив несколько раз

Я хочу преобразовать строку в массив. Следующий пример.
1.Напишите первую букву с большой буквы
2.Буква после ',' или '_' становится заглавной
3.Строки разделяются символом ','
4. поменять подчеркивание на ' '


    $str_1 = "_ab,cb_ef,kk,uu";
    $str_2 = ",cb_ef,kk,uu";
    $str_3 = "cb_ef,kk,uu";

    //convert to

    $arr_1 = ('Ab','Cb Ef','Kk','Uu');
    $arr_2 = ('Cb Ef','Kk','Uu');
    $arr_3 = ('Cb Ef','Kk','Uu');

    //There are my code and result .

    $func = function( $str ){

        $str_len = strlen( $str );
        for ( $i = 0 ; $i < $str_len ; $i++ )
        {
            if ( $str[ $i ] == ',' && $str[ $i ] == '_' )
            {
                $str[ $i ] = $str[ $i ] == '_' ? ' ' : $str[ $i ] ;
                if ( ord( $str[ $i +1 ] ) <= 122 && ord( $str[ $i +1 ] ) >= 97 )
                {
                    $str[ $i ] = chr( ord( $str[ ++$i ] ) - 32 );
                }
            }
        }
        return $str;
    };
    var_dump(explode( ',' , $func( 'ss,adsa_sdfs' )));

    //result is this

    array(2) { [0]=> string(2) "ss" [1]=> string(9) "adsa_sdfs" }

проверьте мой ответ для альтернативного решения...

ariefbayu 26.07.2019 06:21
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
62
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Попробуйте следующий код:

<?php

function ConvertToArr($str)
{
    $result    = array();
    $temp_arr1 = explode(",", $str);
    for ($count1 = 0; $count1 < count($temp_arr1); $count1++) {
        $temp_results = array();
        $temp_arr2    = explode("_", $temp_arr1[$count1]);
        for ($count2 = 0; $count2 < count($temp_arr2); $count2++) {
            $temp_str = ucfirst($temp_arr2[$count2]);
            if ($temp_str != "")    
                $temp_results   []= $temp_str;
        }
        $temp_results = implode(" ", $temp_results);
        if (trim($temp_results) != "")
            $result      []= $temp_results;
    }

    return $result;
}

$str_1 = "_ab,cb_ef,kk,uu";
$str_2 = ",cb_ef,kk,uu";
$str_3 = "cb_ef,kk,uu";

print_r(ConvertToArr($str_1));
print_r(ConvertToArr($str_2));
print_r(ConvertToArr($str_3));

?>

Он производит следующий вывод:

Array
(
    [0] => Ab
    [1] => Cb Ef
    [2] => Kk
    [3] => Uu
)
Array
(
    [0] => Cb Ef
    [1] => Kk
    [2] => Uu
)
Array
(
    [0] => Cb Ef
    [1] => Kk
    [2] => Uu
)

«Cb» и «Ef» вместе.

DDOS 26.07.2019 06:24
Ответ принят как подходящий

Попробуй это

function conv( $str ) {
    $res = [];
    $arr = explode( ',' , $str );
    foreach ( $arr as $key => $value ) {

        $res[] = ucwords( str_replace( '_' , ' ' , $value ) );

    }
    return $res;
}


var_dump( conv( 'ss,adsa_sdfs' ) );

Ответ:

array(2) { [0]=> string(2) "Ss" [1]=> string(9) "Adsa Sdfs" }

Демонстрационный код с вашими тестовыми примерами:

<?php

function upper($s, $sep)
{
    // upper the char separated by $sep
    $a = explode($sep, $s);
    $a = array_map('ucfirst', $a);
    return join($sep, $a);
}

function test($s)
{
    // upper the chars separated by '_'
    $s = upper($s, '_');

    // upper the chars separated by ','
    $s = upper($s, ',');

    // change all '_' to ' ' and upper the chars
    $s = str_replace('_', ' ', $s);
    $s = upper($s, ' ');

    // trim unused chars
    $s = trim($s, ' ,');

    return explode( ',', $s);
}


$tests = [
    "_ab,cb_ef,kk,uu" => ['Ab','Cb Ef','Kk','Uu'],
    ",cb_ef,kk,uu" => ['Cb Ef','Kk','Uu'],
    "cb_ef,kk,uu" => ['Cb Ef','Kk','Uu'],
    "ss,adsa_sdfs" => ['Ss', 'Adsa Sdfs'],
];

foreach ($tests as $s=>$a) {
    $out = test($s);
    if ($out === $a) {
        echo "OK! $s = " . json_encode($a) . PHP_EOL;
    } else {
        echo "WRONG! $s is " . json_encode($out) . PHP_EOL;
    }
}

Выход:

OK! _ab,cb_ef,kk,uu = ["Ab","Cb Ef","Kk","Uu"]
OK! ,cb_ef,kk,uu = ["Cb Ef","Kk","Uu"]
OK! cb_ef,kk,uu = ["Cb Ef","Kk","Uu"]
OK! ss,adsa_sdfs = ["Ss","Adsa Sdfs"]

Напишите это

<?php 
$str_1 = "_ab,cb_ef,kk,uu";
    $str_2 = ",cb_ef,kk,uu";
    $str_3 = "cb_ef,kk,uu";

    function convert_to($arr){

        $arr = str_replace('_', ' ', $arr); 
        $arr_1 = explode(",",$arr); 

        $new_array = array_map('trim', $arr_1);
        $new_array = array_map('ucwords', $arr_1);  // first letter after word capitalize
        $new_array = array_filter($new_array, 'strlen'); // remove empty item
        $new_array = array_values($new_array); // arrange and shift after removing empty item

        return $new_array;
    }
    $arr_1 = convert_to($str_1);
    $arr_2 = convert_to($str_2);
    $arr_3 = convert_to($str_3);

    var_dump($arr_1);
    var_dump($arr_2);
    var_dump($arr_3);  

Выход :

array(4) {
  [0]=>
  string(3) " Ab"
  [1]=>
  string(5) "Cb Ef"
  [2]=>
  string(2) "Kk"
  [3]=>
  string(2) "Uu"
}
array(3) {
  [0]=>
  string(5) "Cb Ef"
  [1]=>
  string(2) "Kk"
  [2]=>
  string(2) "Uu"
}
array(3) {
  [0]=>
  string(5) "Cb Ef"
  [1]=>
  string(2) "Kk"
  [2]=>
  string(2) "Uu"
}

Вы можете использовать встроенные функции PHP для такой ситуации:

function processString($param){
    $explode = explode(',', $param);
    $replace = str_replace('_', ' ', $explode);
    $replace = array_map('trim', $replace);
    $ucfirst = array_map('ucwords', $replace);

    return $ucfirst;
}

Объяснение:

  1. Сначала мы преобразуем строку в массив на основе разделения запятыми, используя метод explode().
  2. Далее нам нужно преобразовать подчеркивание в пробел, используя метод str_replace().
  3. Я заметил в вашем примере, что строка с пробелом (ранее символом подчеркивания) в ней удалена. Это необходимо реализовать с помощью trim(). Поскольку строка уже преобразована в массив, мы используем метод array_map() для обработки обрезки всех значений массива.
  4. Наконец, преобразуйте каждое слово в верхний регистр. К счастью, в PHP уже есть метод: ucwords(). Просто нужно array_map() это.

Вот как вы тестируете код:

$str_1 = "_ab,cb_ef,kk,uu";
$str_2 = ",cb_ef,kk,uu";
$str_3 = "cb_ef,kk,uu";

print_r(processString($str_1));
print_r(processString($str_2));
print_r(processString($str_3));

Другие вопросы по теме