2011-02-01 1 views
1

У меня есть строка, которую я хочу очистить и поместить в массив, чтобы я мог искать его в mysql.php взорвать что-то в массив, но используя значения между


// Here's one example of what the string might have: 
$string1 = "(1) *value1* *value2*; (2) *value3* *value4* *value5*; (3) *value6*"; 
// And here's another possibility: 
$string2 = "*value1* *value2* *value3* *value4*"; 

// I want to remove all the "(#)" stuff, and explode all the values into an array 
// This is what I have so far: 
// $string can be like the examples $string1 or $string2 

$string_clean = str_replace("* *","",trim(preg_replace("/\((\d)\)/i", "", $string))); 
$my_array = explode('*', trim($string_clean, '*')); 

Однако, это то, что я получаю:

Array ([0] => value1 [1] => [2] => value2 [3] => [4] => value3 [5] => [6] => value4 [7] => [8] => value5) 

Я полагаю, я мог бы просто найти функцию, чтобы удалить все пустые элементы из массива, но мне интересно, есть ли более эффективный способ сделать это?

+0

Если ваши значения не содержат пробелов, вы можете 'str_replace()' away' * 'и'; ',' preg_repalce() 'away' (#)', а затем 'explode()' on '" "' чтобы получить все значения. –

ответ

3

Вам нужно preg_match_all():

preg_match_all('#\*([^*]+)\*#', $string, $matches); 
$result = $matches[1]; 
// $result is array('value1', 'value2', ...) 

Найдет все *something* и возвратить строки между *.

+0

Спасибо, человек! Я получил забавный результат с массивом в массиве, хотя – Jay

+0

Да, результат в $ matches [1], как я уже сказал, не в $ match :-) – arnaud576875

+0

Array ([0] => Array ( [0 ] => * значение1 * [1] => * значение2 * [2] => * значение3 * [3] => * value4 * [4] => * value5 *) [1] => Массив ( [0] => * значение1 * [1] => * значение2 * [2] => * значение3 * [3] => * value4 * [4] => * value5 *) ) – Jay