Разрыв строки В PHP


Как мне разорвать эту строку '||25||34||73||94||116||128' мне нужно иметь такой массив

array (
 0 => '25',
 1 => '34',
 2 => '73',
 3 => '94',
 4 => '116',
 5 => '128'
)

Взорваться("||", $массив); у меня не получилось, я получаю этот массив

array (
 0 => '',
 1 => '25',
 2 => '34',
 3 => '73',
 4 => '94',
 5 => '116',
 6 => '128',
) 
Author: Charles, 2010-03-19

6 answers

$array = explode('||', trim($string, '|'));
 12
Author: Adam Kiss, 2010-03-19 11:33:38

Решением, особенно , если у вас могут быть пустые значения в середине строки , может быть использование preg_split и его PREG_SPLIT_NO_EMPTY флаг :

$str = '||25||34||73||94||116||128';
$array = preg_split('/\|\|/', $str, -1, PREG_SPLIT_NO_EMPTY);
var_dump($array);

Даст вам:

array
  0 => string '25' (length=2)
  1 => string '34' (length=2)
  2 => string '73' (length=2)
  3 => string '94' (length=2)
  4 => string '116' (length=3)
  5 => string '128' (length=3)


Если у вас никогда не будет пустых значений в середине строки, использование explode будет быстрее, даже если вам придется удалить || в начале и конце строки перед ее вызовом.

 5
Author: Pascal MARTIN, 2010-03-19 11:37:02
$str='||25||34||73||94||116||128';
$s = array_filter(explode("||",$str),is_numeric);
print_r($s);

Вывод

$ php test.php
Array
(
    [1] => 25
    [2] => 34
    [3] => 73
    [4] => 94
    [5] => 116
    [6] => 128
)
 2
Author: ghostdog74, 2010-03-19 12:19:36

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

 1
Author: VolkerK, 2017-05-23 12:13:27

Вы можете сделать:

explode('||',substr($str,2));
 0
Author: codaddict, 2010-03-19 11:36:20

Помимо уже упомянутых решений, вы также можете впоследствии отфильтровать пустые значения:

$arr = array_filter(explode("||", $str), function($val) { return trim($val) === ""; });

В этом примере используется анонимная функция, которую вам потребуется заменить, если вы не используете PHP версии 5.3 или выше, либо используете create_function:

$arr = array_filter(explode("||", $str), create_function('$val', 'return trim($val) === "";'));

Или с предопределенной функцией:

function isEmptyString($str) {
    return trim($str) === "";
}
$arr = array_filter(explode("||", $str), "isEmptyString");
 0
Author: Gumbo, 2010-03-19 11:44:20