Solo che mentre questo script contiene i titoli in un array, io vorrei che l'id passato con [libro=3] determini l'esecuzione di una query su db.
L'avevo capito, ma quelli che ti forniamo qui sono sempre dei codici di esempio: li devi adattare alle tue esigenze. Se vuoi qualcosa di più specifico, questo è il lavoro che dovresti fare:
codice:
$text = "I miei libri preferiti sono:\n[libro=1] e [libro=201]";
if (preg_match_all('/\[libro=([0-9]+)\]/', $text, $ids)) {
$ids = array_unique(array_filter($ids[1], function($id) {
return intval($id);
}));
// qui la query, del tipo:
// $query = 'SELECT nome, autore, copertina FROM books WHERE id IN('.implode(', ', $ids).')';
// in $result recupero tutti i risultati della query
$text = preg_replace_callback('/\[libro=([0-9]+)\]/', function($book) use ($result) {
$bookId = $book[1];
if (...) { // controllo se esiste in $result un libro che ha l'id $bookId.
return "..."; // restituisco l'output modificato, utilizzando $result
}
// il libro non esiste, che faccio? lancio una eccezione? o lo gestisco silenziosamente?
}, $text);
}
echo $text;