Ciao. Ci ho messo tanto a trovare un modo rapido, semplice e pulito che permettesse di fare quello che vuoi. Alla fine però ce l'ho fatta con preg_match_all.
Ecco il codice:
Codice PHP:
$stringa = "{codice_1|valore_1|data_1}{codice_2|valore_2|data_2}";
$pattern = "/(?<=\\{)(.*?)\\|(.*?)\\|(.*?)(?=\\})/";
preg_match_all ($pme_pattern, $stringa, $matches);
/*
$matches è un array multidimensionale restituito dalla funzione con questa struttura (nel caso in questione):
Array (
[0] => Array ( [0] => "codice_1|valore_1|data_1", [1] => "codice_2|valore_2|data_2" ),
[1] => Array ( [0] => "codice_1", [1] => "codice_2" ),
[2] => Array ( [0] => "valore_1", [1] => "valore_2" ),
[3] => Array ( [0] => "data_1", [1] => "data_2" )
)
L'array che si trova con indice 0 nel primo livello non serve.
*/
$valore = array();
$data = array();
// Con un ciclo for accedo a ogni gruppo di dati
for ($i = 0; $i < sizeof($matches[1]); $i++) {
// $matches[0][$i] non ti serve, come dicevo prima
// $matches[1][$i] = "codice" della variabile (es: "codice_1")
// $matches[2][$i] = "valore" della variabile (es: "valore_1")
// $matches[3][$i] = "data" della variabile (es: "data_1")
// se poi vuoi raccogliere i valori nelle variabili che hai detto tu:
$valore[$matches[1][$i]] = $matches[2][$i];
$data[$matches[1][$i]] = $matches[3][$i];
}
Va bene allora?
Fammi sapere.