Effectiviteit van dit stukje code (foreach met break)

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Top Low-Code Developer Gezocht!

Bedrijfsomschrijving Unieke Kansen, Uitstekende Arbeidsvoorwaarden & Inspirerend Team Wij zijn een toonaangevende, internationale organisatie die de toekomst van technologie vormgeeft door het creëren van innovatieve en baanbrekende oplossingen. Ons succes is gebaseerd op een hecht en gepassioneerd team van professionals die altijd streven naar het overtreffen van verwachtingen. Als jij deel wilt uitmaken van een dynamische, vooruitstrevende en inspirerende werkomgeving, dan is dit de perfecte kans voor jou! Functieomschrijving Als Low-Code Developer ben je een cruciaal onderdeel van ons team. Je werkt samen met collega's uit verschillende disciplines om geavanceerde applicaties te ontwikkelen en te optimaliseren met behulp van Low-code

Bekijk vacature »

Seb D

Seb D

07/11/2010 11:39:21
Quote Anchor link
Hi All,

Mijn eerste post hier kom ik meteen binnengewalst met een vraag. Niet zo zeer hoe iets moet maar ben benieuwd naar meningen over hoe efficient deze code is.

foreach ($users as $user) {
$post_count = get_usernumposts($bloguser->user_id);
$user_list[$bloguser->user_id]=$post_count;
}


foreach ($user_list as $key => $value) {
$count++;
// doe code
if($count<=5){
// doe code
}
else
{
break;
}
}

Het ding is ik weet niet hoeveel users ik in de userlist krijg, maar ik weet wel na hoeveel users ik de lijst wil afbreken. In dit voorbeeld dus 5. Is deze break om de foreach loop op dit moment af te breken efficient? of kan ik beter iets anders gebruiken hiervoor?

Alvast bedankt, hoop dat de code duidelijk is heb het natuurlijk een beetje ingekort :).
Gewijzigd op 07/11/2010 11:40:22 door Seb D
 
PHP hulp

PHP hulp

27/11/2024 05:09:37
 
Mark L

Mark L

07/11/2010 11:51:23
Quote Anchor link
Krijg je de userlist uit een Database?

Kijk anders eens naar LIMIT.
 
Seb D

Seb D

07/11/2010 11:56:14
Quote Anchor link
Limit heeft hier niet zo veel mee te maken (helaas).
Punt is dat de code een lijst met gebruikers binnenhaalt en hoeveel post deze hebben gedaan dus

[0][naam] => "pietje"
[0][posts] => 55

en dat van alle users, dus van te voren weet je niet wie het meeste posts heeft. vervolgens sorteer ik de array met data zodat ik een top van posts kan maken (dus de 5 mensen met de meeste posts).

Normaal gesproken zou je dat prima kunnen afvangen in sql met een join & limit o.i.d. maar dit gaat om een wordpress installatie waarbij je voor het nette de wp hooks moet gebruiken.

thanx voor je reactie en meedenken!
 
Jelmer -

Jelmer -

07/11/2010 13:47:56
Quote Anchor link
Versie 3 en hoger van WP hebben count_many_users_posts wat maar één query voor alle users hoeft uit te voeren. Dat lost je eerste foreach-lus al op.

Nadat je hem gesorteerd hebt kan je zo'n foreach lus doen zoals jij hem gebruikt, je kan ook iets met een for-lus doen, het is maar wat je zelf leuk vindt, het is allemaal bij benadering even efficiënt. Een foreach-lus is denk ik wel beter leesbaar dan dit
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php

$users
= array(
    4 => 'Jelmer',
    12 => 'Bas',
    27 => 'Jan',
    18 => 'Klaas');

// $post_counts = count_many_users_posts(array_keys($users));

$post_counts = array(
    4 => 12,
    12 => 127,
    27 => 18,
    18 => 2);

arsort($post_counts);

for ($count = 0;
  $count < 5 && (list($user_id, $post_count) = each($post_counts));
  ++
$count)
{

    printf("Gebruiker %s heeft %d posts\n",
        $users[$user_id], $post_count);
}

?>
 
Seb D

Seb D

07/11/2010 15:29:31
Quote Anchor link
Thanx,
lost nog steeds het probleem niet op dat ik altijd alle users uit de database moet trekken. Maar die for loop vind ik wel mooier dan mijn foreach. Tevens ben ik er door jou post achtergekomen dat ik een wp-functie gebruik die niet meer gesupport wordt en misschien in volgende versies verwijderd wordt, dus kan ik beter de count_many_users_post gebruiken :)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.