PHP взорвать что-то в массив, но с использованием значений между - PullRequest
1 голос
/ 01 февраля 2011

У меня есть строка, которую я хочу очистить и поместить в массив, чтобы я мог найти ее в mysql.


// 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 ) 

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

1 Ответ

3 голосов
/ 01 февраля 2011

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

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

Это найдет все *something* и вернет строки между *.

...