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

У меня есть строки из базы данных, как это:

$string1 = "1219.56.C38-.C382                 Codex Azcatitlan";
$string2 = "1219.56.C45-.C452                      Codex Cempoallan";

Как я могу разделить их на:

["1219.56.C38-.C382", "Codex Azcatitlan"]
["1219.56.C45-.C452", "Codex Cempoallan"]

Обратите внимание, если я использовал $ stringar1 = explode («», $ string1) и т. Д.
Я получу это:

array(3)
(
[0] => string "1219.56.C38-.C382"[1] => string "Codex"[2] => string "Azcatitlan")

и т.п.

Мне нужен «Кодекс Азкатитлан»

Я не знаю заранее, сколько есть несколько пробелов между левым и правым элементом.
Однако можно предположить, что это всегда будет больше 1 пробела.

1

Решение

Ограничить количество частей третьим аргументом взорваться () с сочетанием array_map () удалить ненужные места:

// this means you will have 2 items and all other spaces
// after first one  will not be used for `explod`ing
$r = array_map('trim', explode(" ", $string1, 2));
4

Другие решения

использование preg_split и проверьте не менее 2 пробельных символов.

$string1 = "1219.56.C38-.C382                 Codex Azcatitlan";
$string2 = "1219.56.C45-.C452                      Codex Cempoallan";
print_r(preg_split('/\h{2,}/', $string1));
print_r(preg_split('/\h{2,}/', $string2));

https://3v4l.org/oWbIf

Если $strings также следует разделить на новые строки изменить \h в \s, \h горизонтальный пробел (табуляция или пробел), \s это любые пробелы.

{} создает диапазон в регулярных выражениях. Единственное значение внутри — это количество разрешенных символов, , внутри делает минимальный и максимальный диапазон. 2 является минимальным, и никакое второе значение означает любое количество дополнительных совпадений. Это так же, как + но вместо одного матча должно быть два.

3

Вы можете использовать комбинацию explode(), array_shift(), а также implode()

$string1 = "1219.56.C38-.C382                 Codex Azcatitlan";

// explode() on spaces
$explode = explode( ' ', trim( $string1 ) ); // apply trim() just in case there are ever leading spaces

$result = array(
array_shift( $explode ), // remove the first element from the array and give me it's value
trim( implode( ' ', $explode ) ) // $explode has it's first element removed so we can just implode it
);

var_dump( $result );

Выход:

array(2) {
[0]=>
string(17) "1219.56.C38-.C382"[1]=>
string(16) "Codex Azcatitlan"}
1

Вы можете использовать комбинацию explode() а также substr()

$string1 = "1219.56.C38-.C382                 Codex Azcatitlan";

// explode() on spaces
$explode = explode( ' ', trim( $string1 ) ); // apply trim() just in case there are ever leading spaces

$result = array(
$explode[ 0 ], // give me everything before the first space char
trim( substr( $string1, strlen( $explode[ 0 ] ) ) ) // give me everything starting from the first space char and apply trim()
);

var_dump( $result );

Выход:

array(2) {
[0]=>
string(17) "1219.56.C38-.C382"[1]=>
string(16) "Codex Azcatitlan"}
1
preg_match_all('~^[a-zA-Z0-9-]+\.[a-zA-Z0-9-]+\.[a-zA-Z0-9-]+\.[a-zA-Z0-9]+\s+([a-zA-Z0-9\s]+)~i', '1219.56.C38-.C382                 Codex Azcatitlan', $matches);

print_r($matches);

массив ( [0] => Массив ( [0] => 1219.56.C38-.C382 Кодекс Азкатитлан )

[1] => Array ( [0] => Codex Azcatitlan )

)

-2
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector