Разделить строку между символом и числом в массиве PHP - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть строка, которая выглядит следующим образом:

$data1 = "W97";
$data2 = "RP100";
$data3 = "MAL89";
$data4 = "UNIQ95";

В строке сначала будет содержаться символ, а затем число, я хочу, например, разбить символ и число на массив. :

print_r($this->splitString($data1)); //array([0]=>'W',[1]=>97)
print_r($this->splitString($data2)); //array([0]=>'RP',[1]=>100)
print_r($this->splitString($data3)); //array([0]=>'MAL',[1]=>89)
print_r($this->splitString($data4)); //array([0]=>'UNIQ',[1]=>95)

function splitString($string){
  $result = array();
  //???
  return $result;
}

Как я могу это сделать?

Ответы [ 3 ]

0 голосов
/ 09 апреля 2020

используйте этот метод, это будет работать для вас.

$data1      = "W2020";
$data2      = "AB2020";
$data3      = "ZXCV2020";

print_r(splitString($data3));

function splitString($string){
    $alpha_string = '';
    $num_string = '';
    $array2 = str_split( $string );

    foreach($array2 as $value){
        if(is_numeric($value))
            $num_string .= $value;
         else
            $alpha_string .= $value;
    }
    $data_array = array($alpha_string, $num_string);

    return $data_array;
}

вот и все. Это будет работать.

0 голосов
/ 09 апреля 2020

Используйте lookaround:

$data1 = "W97";
$data2 = "RP100";
$data3 = "MAL89";
$data4 = "UNIQ95";


print_r(splitString($data1)); //array([0]=>'W',[1]=>97)
print_r(splitString($data2)); //array([0]=>'RP',[1]=>100)
print_r(splitString($data3)); //array([0]=>'MAL',[1]=>89)
print_r(splitString($data4)); //array([0]=>'UNIQ',[1]=>95)

function splitString($string){
  $result = array();
  $result = preg_split('/(?<=[A-Z])(?=\d)/', $string);
  return $result;
}

Вывод:

Array
(
    [0] => W
    [1] => 97
)
Array
(
    [0] => RP
    [1] => 100
)
Array
(
    [0] => MAL
    [1] => 89
)
Array
(
    [0] => UNIQ
    [1] => 95
)

Объяснение:

(?<=[A-Z])      # positive lookbehind, make sure we have a capital letter before the current position
(?=\d)          # positive lookahead, make sure we have a digit after the current position
0 голосов
/ 09 апреля 2020

Предполагая, что есть только одна часть «символа», за которой следует одна часть числа, это регулярное выражение сопоставит их обоих по отдельности:

/^([A-Z]+)([0-9]+)$/

При использовании в preg_match() это дает следующий результат:

$regexp = '/^([A-Z]+)([0-9]+)$/';
$string = 'ABC1234';
$matches = [];

preg_match($regexp, $string, $matches);

var_dump($matches);

// Output:
array(3) {
  [0] =>
  string(7) "ABC1234"
  [1] =>
  string(3) "ABC"
  [2] =>
  string(4) "1234"
}

Просто сбросьте (или проигнорируйте) первый индекс, и вы готовы к go.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...