2010-03-19 2 views
3

Как я взорвать эту строку '||25||34||73||94||116||128' мне нужно, чтобы иметь массив как этогорасчленение строки в PHP

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', 
) 

ответ

12
$array = explode('||', trim($string, '|')); 
+0

Спасибо, что это сработало для меня – streetparade

5

Раствор, особенно если вы можете иметь пустые значения в середине строки, может быть использовать 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 будет быстрее, даже если вы должны удалить || в начало и конец строки перед ее вызовом.

2
$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 
) 
+0

Что делать, если есть значение '0'? – Gumbo

0

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

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

Этот пример использует anonymous function, что вам нужно будет заменить, если вы не используете 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"); 
1

С one of your previous questions был, как хранить и обновлять такую ​​строку в MySQL ... давайте предположим на мгновение один из ваших будущих задач будет узнать, если определенное значение находится в этом массиве/строке или для поиска/подсчета всех записей, имеющих определенное значение в этом массиве.
В таком случае вы способ доставки хотите начать normalizing your table сейчас.