Qual è il modo migliore per sincronizzare 2 strutture di dati in PHP?
Domanda
Sto cercando di sincronizzare un gruppo di video che ho recuperato da un determinato utente da Youtube a una tabella di database di ID video.
Questo perché YouTube non consente l'aggiunta di meta informazioni a un video. Quindi ho creato una tabella video sul mio server e vorrei sincronizzare i videoids.
vale a dire. app php / mysql < - > Youtube
La struttura dei dati per i video di YouTube è la seguente:
foreach ($feed as $entry) {
print "<p>";
print $entry->getVideoId();
print "</p>";
}
per il mio db è questo:
$rs->MoveFirst();
while (!$rs->EOF) {
print "<p>";
print $rs->fields['yt_id'];
print "</p>";
$rs->MoveNext();
}
Sai come posso sincronizzare questi dati in modo che:
- Ogni volta che l'utente carica un nuovo video su YouTube, posso chiamare una funzione di sincronizzazione che recupererà l'ultimo video e lo aggiungerà al mysql db?
- Tuttavia, se l'utente elimina un video su YouTube, non è possibile eliminare?
Soluzione
È possibile utilizzare array_diff()
per confrontare gli ID una volta li hai recuperati da entrambe le posizioni, ad esempio:
//build array of video IDs in YouTube
$arYT = array();
foreach ($feed as $entry) {
$arYT[] = $entry->getVideoId();
}
//build array of video IDs in local DB
$arDB = array();
$rs->MoveFirst();
while (!$rs->EOF) {
$arDB[] = $rs->fields['yt_id'];
$rs->MoveNext();
}
//to download, we want IDs which are in YouTube but not in the local Db
$idsToDownload = array_diff($arYT, $arDB);
//to delete, we want IDs which are in the local DB but not in YouTube
$idsToDelete = array_diff($arDB, $arYT);
E poi puoi fare qualcosa del genere:
//download new videos
foreach ($idsToDownload as $id) {
//get video info for video $id and put into local db
}
//delete deleted videos
foreach ($idsToDelete as $id) {
//delete $id from local DB
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow