PHP - разделение строки с двумя параметрами - PullRequest
2 голосов
/ 16 августа 2011

Я пытаюсь разбить строку, полученную от $ _GET в PHP, но я застрял, так как это больше, чем обрабатывает функция explode () - или я так думаю.

Если полученная строка содержит кавычки (""), я хочу, чтобы разделение (по пробелам) сохраняло содержимое в кавычках без изменений.Например, результат типа 'Foo bar "Bar 2"' будет разбит на 1 -> Foo;2 -> бар;3 -> Бар 2.

Я просматривал explode (), preg_split и подобные вещи, но я не понимаю, как разбить большую строку по пробелам, сохраняя при этом целые подстроки, которые заключены в кавычки.

Спасибо.

1 Ответ

6 голосов
/ 16 августа 2011

Это определение файла CSV с пробелом в качестве разделителя.Используйте функцию синтаксического анализа CSV str_getcsv.

$str = 'Foo bar "Bar 2"';
$arr = str_getcsv($str, ' ');
print_r($arr);

Вывод:

Array
(
    [0] => Foo
    [1] => bar
    [2] => Bar 2
)

Для PHP <5.3, из комментариев руководства PHP: </p>

if (!function_exists('str_getcsv')) {
    function str_getcsv($input, $delimiter = ",", $enclosure = '"', $escape = "\\") {
        $fiveMBs = 5 * 1024 * 1024;
        $fp = fopen("php://temp/maxmemory:$fiveMBs", 'r+');
        fputs($fp, $input);
        rewind($fp);

        $data = fgetcsv($fp, 1000, $delimiter, $enclosure); //  $escape only got added in 5.3.0

        fclose($fp);
        return $data;
    }
}
...