Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Jak usunąć elementy z listy?
Forum PHP.pl > Forum > Przedszkole
xajart
Witam. 

Chciałem zrobić skrypt który będzie z FTP usuwał pliki. W tym celu mam baze danych z nazwami plików (które są użytkowane, czyli użyte gdzieś w treści strony) oraz pobieram drugą listę na podstawie zawartości foldera (folderów) na serwerze. 

Teraz chciałbym z tablicy FTP usunąc elementy które nie występuja na tablicy z BD (oczywiście wcześniej te wartości zostały pobrane do zmiennych tablicowych).


Bo usuwanie elementów które występują w BD jest proste, ale jak skonstruować skrypt by usuwało elementy które nie występują, myślałem o funkcji rekurencyjnej, ale jak tych plików będzie kilkaset czy kilka tysięcy,to nawet nie ma co o tym mówić. 

Może znacie jakieś rozwiazania tego, lub możecie coś zasugerować, bo puki co nie wiem z której strony to ugryźć, a chciałbym aby ten skrypt działał optymalnie. 

Wiem że w PHP istnieje funkcja za pomocą której można wyszukiwać elementy w tablicy (ale nie wiem czy można je wyszukiwać na podstawie tablicy zmiennych). 


erix
Cytat
Wiem że w PHP istnieje funkcja za pomocą której można wyszukiwać elementy w tablicy (ale nie wiem czy można je wyszukiwać na podstawie tablicy zmiennych).

Najlepiej byłoby co plik wykonywać zapytanie o konkretny wpis, ale byłoby to bez sensu.

W takim razie - pobierasz do tablicy wszystkie ścieżki z bazy (powinno pociągnąć, wszak chodzi o same nazwy/ścieżki smile.gif), potem iterujesz po plikach i przy pomocy in_array sprawdzasz, czy jest plik w bazie. false - kasujesz.
xajart
Przepraszam że odświeżam temat ale dalej sobie z tym nie poradziłem.

Załużmy że mamy dwie zmienne tablicowe, jedna zawiera listę plików na serwerze, druga zawiera listę plików w bazie danych.

ListaBD | ListaFTP
aaa.jpg | bbb.jpg
ccc.jpg | ddd.jpg
ggg.jpg | aaa.jpg
hhh.jpg | ccc.jpg

nie istotne jest to jakie mają nazwy czy formaty (podałem tylko dla przykładu).

I teraz chce porównać obydwie tablice i uzyskać trzecią wynikową zawierajacą elementy z ListaFTP, bez tych które występują na ListaBD.

Nowa Lista
bbb.jpg
ddd.jpg

Majac taką listę  wówczas można zrobić skrypcik który będzie te pliki usuwał.

Może jednak lepiej było by to zrobić na funkcji rekurencyjnej (wiem że przy dużej ilości tych danych będzie przymulać, ale ten skrypt będzie się najwyżej uruchamiać raz na jakiś czas by powywalać śmieci).

Czy może mi ktoś polecić jakieś przykłady takiej funkcji rekurencyjnej, bo siedze nad tym już drugi dzień i jakoś mi to opornie idzie.

Wiem że pewnie musi to jakoś tak działać że, istnieją dwie pętle i warunek po nich który sprawdza najpierw porownujac element pierwszy ze wszystkimi elementami pętli drugiej, jeżeli wystąpi to wywołać funkcję od nowa i przeprowadzić operację ponownie ale bez tego elementu, gorzej bo w praktyce mi to nie wychodzi tak jak bym chciał sad.gif


franki01
  1. $nowaLista = array_diff($listaFTP, $listaBD);
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.