Skocz do zawartości
PL
Szukaj na Pecetowiczu
  • Utwórz konto

System przyjaciół, optymalizacja funkcji


Rekomendowane odpowiedzi

Witam! Mam taki oto kod:


function friends($id) {

		global $db_host,$db_user,$db_pass,$db_base,$userdata,$sex;

		$db = new mysqli($db_host,$db_user,$db_pass,$db_base);

		$sender_id = $id;

		$sql = "SELECT * FROM friends WHERE sender_id='$sender_id' OR recipient_id='$sender_id'";

		if($result=$db->query($sql)) {

			if($result->num_rows>0) {

				foreach ($result as $row) {

					if($row['status']==2) {

						if($row['sender_id']==$sender_id) {

							if(file_exists('images/avatars/'.md5($row['recipient_id']).'.png')) $avatar='images/avatars/'.md5($row['recipient_id']).'.png';

							else {

								if($sex==0) {

									$avatar='images/avatars/female.png';

								}

								else {

									$avatar='images/avatars/male.png';

								}

							}

							echo '';

						}

						else{

							if(file_exists('images/avatars/'.md5($row['sender_id']).'.png')) $avatar='images/avatars/'.md5($row['sender_id']).'.png';

							else {

								if($sex==0) {

									$avatar='images/avatars/female.png';

								}

								else {

									$avatar='images/avatars/male.png';

								}

							}

							echo '';

						}

					} else return false;

				}

			} else echo 'Brak znajomych';

		} else return false;

	}

[/code]

Krótko mówiąc wiem, że jest on nieoptymalny i czy mógłby ktoś pomóc z jego optymalizacją? tzn. Jak przerobić go żeby oparty był na returnach? Jak zwrócić pętlę foreach?

Odnośnik do komentarza
Udostępnij na innych stronach

Zacznijmy od tego, dlaczego łączysz się z bazą w funkcji?

Odnośnik do komentarza
Udostępnij na innych stronach

Dobre pytanie przyjacielu, już temu zaradziłem. Dalej nie wiem jak przerobić tę funkcję. Możesz mnie jakoś nakierować? Czego szukać w internecie?

Odnośnik do komentarza
Udostępnij na innych stronach

1.

foreach ($result as $row) 
<- to nie ma prawa działać. ._. 2. Mniej spacji/tabulatorów. 3.
else echo 'Brak znajomych'; 

funkcja powinna zwracać, nie wyświetlać.

Odnośnik do komentarza
Udostępnij na innych stronach

W takim razie jak zwrócić rezultat zapytania?

Odnośnik do komentarza
Udostępnij na innych stronach

while($row = $result->fetch_assoc()){

}

Odnośnik do komentarza
Udostępnij na innych stronach

I w tego while'a mam dać

return $row;

?

Odnośnik do komentarza
Udostępnij na innych stronach

Nie, tak samo jak użyłeś foreach().

Odnośnik do komentarza
Udostępnij na innych stronach

3.

else echo 'Brak znajomych'; 

funkcja powinna zwracać, nie wyświetlać.

Ok. Po prostu stosowałem się do tego.

Odnośnik do komentarza
Udostępnij na innych stronach

while($row = $result->fetch_assoc()){ 


}

Pętla którą ma ma dobrą składnie. Nie wiem po co zmieniać?

Odnośnik do komentarza
Udostępnij na innych stronach

matys307,

Nie, tak samo jak użyłeś foreach().

On chciał użyć return we while. ;-)

Odnośnik do komentarza
Udostępnij na innych stronach

Kontynuuj dyskusję

Dołącz do Pecetowicza, aby kontynuować dyskusję w tym wątku.

  • Dodaj nową pozycję...
  • Dodaj nową pozycję...