Как разбить строку на * и - в PHP? - PullRequest
2 голосов
/ 24 августа 2010

Чтобы разделить строку, я использовал следующий код.

$string = "-sev*yes-sev1*no-sev2*yes";
split('[-*]', $string).

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

Array
(
    [0] => sev
    [1] => yes
    [2] =>  sev1
    [3] =>  no
    [4] =>  sev2
    [5] =>  yes
)

Спасибо всем за ваши ответы .. Я пробовал preg_split('[-*]', $string).Это разделение имеет строковый символ мудрый.Я изменил его до preg_split('/[-*]/', $string).Работает хорошо.Было бы здорово, если бы вы могли объяснить мне разницу.

Ответы [ 7 ]

5 голосов
/ 24 августа 2010

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

$string = "-sev*yes-sev1*no-sev2*yes";
$array = preg_split('/-|\*/', $string,-1, PREG_SPLIT_NO_EMPTY);

или

$array = preg_split('/-|\*/', $string);

в качестве альтернативы вы также можете использовать strtok :

$tok = strtok($string, "-*");
$array = array();
while ($tok !== false) {
    $array[] = $tok;
    $tok = strtok("-*");
}

EDIT:

В

 preg_split('[-*]', $string);

[ ] рассматриваются как разделители, а не как класс char, поэтому вы используете регулярное выражение -* для разбиения, что означает ноль или более дефисов.

но в

preg_split('/[-*]/', $string);

вы используете регулярное выражение [-*], которое является классом char для соответствия либо *, либо -

5 голосов
/ 24 августа 2010

вы можете использовать взорвать или preg_split .

3 голосов
/ 24 августа 2010

Preg_split - это то, что вы ищете.

1 голос
/ 24 августа 2010

Ну, предполагая, что ваш ожидаемый результат равен array('sev', 'yes', 'sev1', 'no', 'sev2', 'yes'), вы можете использовать preg_split:

$data = preg_split('/[-*]/', $string, -1, PREG_SPLIT_NO_EMPTY);

Или, учитывая, что похоже, что у вас есть ключевые сегменты (это означает, что первый yes связан с sev, первый no связан с sev1 и т. Д.), Вам может быть лучше либо несколько взрывов:

$result = array();
$data = explode('-', $string);
foreach ($data as $str) {
    if (empty($str)) continue;
    list ($key, $value) = explode('*', $str);
    $result[$key] = $value;
}

Или преобразовать его в сегмент в стиле URL и использовать parse_str ...

$tmp = str_replace(array('-', '*'), array('&', '='), $string);
parse_str($tmp, $result);

Оба из них будут генерировать массивы, такие как:

array(
    'sev' => 'yes',
    'sev1' => 'no',
    'sev2' => 'yes',
);
1 голос
/ 24 августа 2010

В основном есть две замены для split:

  • Если вам нужно использовать регулярные выражения, используйте preg_split().
  • Если вам не нужночтобы использовать регулярные выражения, используйте explode(), так как это быстрее, чем preg_split()
1 голос
/ 24 августа 2010

Просто измените split на preg_split.

preg_split () в руководстве по PHP

0 голосов
/ 24 августа 2010

Использование preg_split().

$string = "-sev*yes-sev1*no-sev2*yes"; 
$result = preg_split('/[-*]/', $string);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...