Effectiviteit van dit stukje code (foreach met break)

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Advanced Mendix Developer Order Management Systeme

Advanced Mendix Developer Order Management Systemen (NL) Den Haag HBO/WO IT Professional "Als Advanced Mendix Developer impact maken op de groeiende e-commerce markt? Je doet dit bij PostNL door met je DevOps team onze Mendix applicaties verder te ontwikkelen, waarbij je complexe logistieke business processen vertaalt naar applicaties die ons primaire proces ondersteunen". Wat ga je doen? PostNL wordt een postal tech company We nemen de ontwikkeling van onze IT applicaties in eigen hand door onze eigen software-ontwikkel-capability op te zetten. Als Advanced Mendix Developer ben je onderdeel van een multidisciplinair, agile werkend Business-IT-team. Samen met dit team bouw je onze logistieke IT-applicaties verder

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

08/03/2021 04:19:56
 
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.