2014-12-02 6 views
0
$string="p1234,p12,p12345,1234,12,12345,12,45678,334,q1255,q67889,q235"; 

Я хочу, чтобы разбить строку на две части, но разделение может быть сделано в последнее вхождение символа «р», то есть после того, как p12345 я бы получить, как указано ниже в группРазделить строку на две равные половины

$str1=p1234,p12,p12345; 
$str2=1234,12,12345; 
$str3=q1255,q67889,q235; 
+0

Вы знаете, что ваша строка не такая же длина ?! – Rizier123

+1

Когда вы говорите «равные половины», вы имеете в виду равное количество разделенных запятыми компонентов? –

ответ

0
$string="p1234,p12,p12345,1234,12,12345"; 

$a = explode(',', $string); 

$s1 = implode(',', array_slice($a, 0, count($a)/2)) 
$s2 = implode(',', array_slice($a, count($a)/2)) 

echo $s1 
//⇒ p1234,p12,p12345 
echo $s2 
//⇒ 1234,12,12345 

UPD Вопрос был пересмотрен. Здесь идет ответ на р/не р:

$a = explode(',', $string); 

$s1 = implode(',', array_filter($a, function($e) { return $e[0] === 'p'; })) 
$s2 = implode(',', array_filter($a, function($e) { return $e[0] !== 'p'; })) 

echo $s1 
//⇒ p1234,p12,p12345 
echo $s2 
//⇒ 1234,12,12345 
+0

Это недействительный ответ на вопрос ... Нет никакого поиска к последнему 'p'-value ... – RichardBernards

+0

@RichardBernards Я не уверен, что понимаю, что вы имеете в виду. – mudasobwa

+0

Вы просто раскалываете массив в двух частях равной длины ... '' ', заданный в вопросе, больше не принимается во внимание ... – RichardBernards

1

Просто попробуйте:

$string = "p1234,p12,p12345,1234,12,12345"; 
$parts = explode(',', $string); 
$size = count($parts); 

$firsthalf = implode(',', array_slice($parts, 0, $size/2)); 
$secondhalf = implode(',', array_slice($parts, $size/2)); 
0

отрежет последнего вхождения р

$string="p1234,p12,p12345,1234,12,12345"; 
$x = explode(',', $string); 
$count=0; 
foreach($x as $v) { 
    if(strpos($v,'p') !== false) { 
    $count++; 
    } 
} 
echo $firsthalf = implode(',', array_slice($x, $count)).'<br>'; 
echo $secondhalf = implode(',', array_slice($x, 0, $count)); 
+0

Я хочу разбить строку при последнем вводе символа «p» i.e после p12345 – Babby

+0

проверить мой обновленный ответ –

+0

избегать многобайтовых небезопасных команд, я бы сказал. Кроме того, explode() и последовательный implode() сравнительно сложны внутри. –

0

Попробуйте это:

$string="p1234,p12,p12345,1234,12,12345"; 
$x = explode(',', $string); 
$x = array_chunk($x, count($x)/2); 
$str1 = implode($x[0],','); 
$str2 = implode($x[1],','); 
0

Простое решение: Использование mb_strrpos(), чтобы найти последний 'p'.
Затем используйте полученное положение как смещение, когда
с использованием mb_strpos() для поиска первой запятой после нее.
Используйте mb_substr(), чтобы получить две части.
Готово.
! Обратите внимание на разницу: mb_str r pos() vs. mb_strpos()!

элегантное решение: Если вы хотите разделить действительно на первой комбинации [запятая] [Шифр], , как будет соответствовать вашему примеру, вы можете просто выпустить один mb_split().
Тогда вам просто нужно использовать правильное выражение для [comma] [cipher], которое я не буду подробно останавливать для вас здесь.

+0

(Не утверждая, что регулярные выражения являются сравнительно менее сложными, D) –

Смежные вопросы