Разрыв строки В 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',
)
6 answers
$array = explode('||', trim($string, '|'));
Решением, особенно , если у вас могут быть пустые значения в середине строки , может быть использование 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
будет быстрее, даже если вам придется удалить ||
в начале и конце строки перед ее вызовом.
$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
)
Поскольку одним из ваших предыдущих вопросов был вопрос о том, как хранить и обновлять такую строку в MySQL...давайте предположим на мгновение, что одной из ваших будущих задач будет выяснить, содержится ли определенное значение в этом массиве/строке, или найти/подсчитать все записи, которые имеют определенное значение в этом массиве.
В этом случае вы можете захотеть начать нормализацию вашей таблицы прямо сейчас.
Вы можете сделать:
explode('||',substr($str,2));
Помимо уже упомянутых решений, вы также можете впоследствии отфильтровать пустые значения:
$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");