PHP взрывается на втором экземпляре разделителя

Я пытаюсь взорвать строку с помощью PHP, но только если перед ее взорванием обнаружен второй экземпляр разделителя, в моем случае я хочу взорвать ее после обнаружения второго пробела.

Моя строка

Apple Green Yellow Four Seven Gray

Выход моего желания

Apple Green
Yellow Four
Seven Gray

Мой исходный код

$string = 'Apple Green Yellow Four Seven Gray';
$new = explode(' ',$string);

Как я могу добиться этого, используя взрыв или любой метод разделения с PHP? заранее спасибо!


person KaoriYui    schedule 02.08.2017    source источник


Ответы (4)


Хороший вопрос - это можно сделать разными способами. я придумал это 1 -

 $data='Apple Green Yellow Blue';


$split = array_map(
    function($value) {
        return implode(' ', $value);
    },
    array_chunk(explode(' ', $data), 2)
);

var_dump($split);
person Farsay    schedule 02.08.2017
comment
В моем случае он вернул только Array ( [0] => Apple Green [1] => Yellow Four Seven Gray ) как-то пропустил Seven Gray - person KaoriYui; 02.08.2017
comment
хорошо @KaoriYui .. я сделал это неправильно, пожалуйста, посмотрите мой обновленный ответ .. он будет работать идеально - person Farsay; 02.08.2017
comment
Итак, я изменил разделитель на пробел и изменил var_dump на print_r, это самое простое, спасибо! - person KaoriYui; 02.08.2017
comment
о, еще раз ... извините, приятель ... я обновил его до разделителя пробелов. - person Farsay; 02.08.2017

Вы также можете использовать это:

$string = 'Apple Green Yellow Four Seven Gray';
$lastPos = 0;
$flag = 0;
while (($lastPos = strpos($string, " ", $lastPos))!== false) {  
    if(($flag%2) == 1)
    {
        $string[$lastPos] = "@";
    }
    $positions[] = $lastPos;
    $lastPos = $lastPos + strlen(" ");
    $flag++;
}
$new = explode('@',$string);
print_r($new);
exit;
person Mansi Raja    schedule 02.08.2017

Вы можете использовать регулярное выражение для этого.

$founds = array();
$text='Apple Green Yellow Four Seven Gray';
preg_match('/^([^ ]+ +[^ ]+) +(.*)$/', $text, $founds);

См. также следующий ответ.

person Murtaza Khursheed Hussain    schedule 02.08.2017
comment
Мой вывод: Array ( [0] => Apple Green Yellow Four Seven Gray [1] => Apple Green [2] => Yellow Four Seven Gray ) он пропустил Seven Gray при взрыве - person KaoriYui; 02.08.2017
comment
просмотрите ссылку, на которую я ссылался в ответе. Это поможет вам - person Murtaza Khursheed Hussain; 02.08.2017

С explode вы не можете получить желаемый результат. Вы должны использовать preg_match_all, чтобы найти все значения. Вот пример:

$matches = array();
preg_match_all('/([A-Za-z0-9\.]+(?: [A-Za-z0-9\.]+)?)/',
       'Apple Green Yellow Four Seven Gray',$matches);

print_r($matches);

Дайте мне знать, если у вас есть какие-либо проблемы.

person Bhavin Solanki    schedule 02.08.2017