Каков наилучший способ синхронизации двух структур данных в PHP? - PullRequest
2 голосов
/ 22 июня 2009

Я пытаюсь синхронизировать несколько видео, полученных от конкретного пользователя с Youtube, в таблицу базы данных идентификаторов видео.

Это потому, что YouTube не позволяет добавлять метаинформацию к видео. Поэтому я создал таблицу видео на своем сервере и хотел бы синхронизировать видеоиды.

т.е. php / mysql app <-> youtube

Структура данных для видео на YouTube выглядит следующим образом:

foreach ($feed as $entry) {
  print "<p>";
  print $entry->getVideoId();
  print "</p>";
}

для моего БД это:

$rs->MoveFirst();
while (!$rs->EOF) {
  print "<p>";
  print $rs->fields['yt_id'];
  print "</p>";
  $rs->MoveNext();
}

Знаете ли вы, как я могу синхронизировать эти данные, чтобы:

  1. Всякий раз, когда пользователь загружает новое видео на YouTube, я могу вызвать функцию синхронизации, которая извлечет последнее видео и добавит его в базу данных mysql?
  2. Однако, если пользователь удаляет видео на YouTube, удаление не происходит?

1 Ответ

1 голос
/ 22 июня 2009

Вы можете использовать array_diff() для сравнения идентификаторов после их получения из обоих мест, например:

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

И тогда вы можете сделать что-то вроде этого:

//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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...