У меня есть строки из базы данных, как это:
$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 пробела.
Ограничить количество частей третьим аргументом взорваться () с сочетанием 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));
использование 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));
Если $string
s также следует разделить на новые строки изменить \h
в \s
, \h
горизонтальный пробел (табуляция или пробел), \s
это любые пробелы.
{}
создает диапазон в регулярных выражениях. Единственное значение внутри — это количество разрешенных символов, ,
внутри делает минимальный и максимальный диапазон. 2
является минимальным, и никакое второе значение означает любое количество дополнительных совпадений. Это так же, как +
но вместо одного матча должно быть два.
Вы можете использовать комбинацию 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"}
Вы можете использовать комбинацию 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"}
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 )
)