abonnement Unibet Coolblue
  dinsdag 8 april 2014 @ 08:13:31 #1
187069 slacker_nl
Sicko pur sang
pi_138639529


Als je vragen hebt over PHP/MySQL, dan zit je hier goed met een vaste kliek guru's en een groot aantal regelmatige bezoekers. Beperk je vragen niet tot "hij doet het niet" of "hij geeft een fout" - onze glazen bol is kapot en we willen graag van je weten wát er niet lukt en wélke foutmelding je precies krijgt :)

Zie ook:
PHP Dataverwerking
Officiële PHP website
PHP Documentatie
MySQL Reference Manual
Yet Another PHP Faq
PHP Cheat Sheet
PHP5 Power Programming - boek met uitleg over OOP, Pear, XML, etc

Tutorials:
W3Schools PHP
W3Schools SQL

Succes heren met het volgende deeltje!
In theory there is no difference between theory and practice. In practice there is.
  dinsdag 8 april 2014 @ 11:53:15 #2
25889 Sitethief
Fulltime Flapdrol
pi_138644652
Om de stilte maar even te doorbreken, wat zou ik aan deze kleine functie kunnen veranderen? Het doel is dat hij zo snel mogelijk zijn werk doet, zonder veel geheugengebruik. Ik zit te denken aan een for loop ipv foreach omdat alle arrays die erheen gaan toch oplopende keys hebben.

Het doel is om arrays met objecten zo om te zetten dat alle objecten in de array een waarde uit het object als key hebben (meestal een bepaalde id) ipv een oplopende key.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
/**
 * Zorgt ervoor dat de key van de array items een van de values($flipKey) van de objecten in de array($toFlip) wordt
 * 
 * @param array $toFlip array met objecten
 * @param string $flipKey key in object
 * @return array
 */
function flipObjectArray($toFlip$flipKey) {
    
$ret = array();
    foreach (
$toFlip as $k => $v) {
        
$ret[$v->{$flipKey}] = $v;
    }
    return 
$ret;
}
?>
Stroek: Sitethief, die is heel groot en sterk :Y.
Faat: *zucht* zoals gewoonlijk hoor Sitethief weer in de bocht &gt;:)
  dinsdag 8 april 2014 @ 12:06:00 #3
137776 boem-dikkie
Jedi Mind Baby!
pi_138645043
Ik ben er zelf sowieso van om variabelen te gebruiken die beschrijven wat ze in zich hebben. $toFlip is natuurlijk onduidelijk als de pest, en dat je er een comment blok bij zet die zegt dat je $toFlip een array met objecten is helpt ook vrij weinig.

Maar dat is kwestie van smaak.
Ik weet niks van Hindoes. Wel van Samoerai en andere dingen.
  dinsdag 8 april 2014 @ 12:11:51 #4
84244 Scorpie
Abject en infaam!
pi_138645195
Ik zou sowieso de functie hernoemen en wat testjes doen om te zien of for of foreach sneller is in jouw geval.
Op dinsdag 13 augustus schreef Xa1pt:
Neuh, fraude mag best aangepakt worden. Maar dat het de maatschappij meer oplevert of beter is voor de samenleving, is nog maar de vraag.
Op donderdag 25 juni 2015 schreef KoosVogels:
Klopt. Ik ben een racist.
pi_138645510
Ook even een test toevoegen of je $flipKey wel bestaat in het object.

Maar ik neem aan dat je dit doet omdat je wilt sorteren? Anders zie ik sowieso niet echt het nut in van deze functie.
  dinsdag 8 april 2014 @ 12:55:17 #6
25889 Sitethief
Fulltime Flapdrol
pi_138646457
quote:
0s.gif Op dinsdag 8 april 2014 12:23 schreef totalvamp het volgende:
Ook even een test toevoegen of je $flipKey wel bestaat in het object.

Maar ik neem aan dat je dit doet omdat je wilt sorteren? Anders zie ik sowieso niet echt het nut in van deze functie.
In de objecten zitten unieke md5 keys ipv een gewone index die ik van de CouchDB terug krijg. Op deze manier heb ik een array met keys die ik gewoon kan gebruiken voor diverse dingen.

Sorteren kan CouchDB gewoon voor mij doen btw.
Stroek: Sitethief, die is heel groot en sterk :Y.
Faat: *zucht* zoals gewoonlijk hoor Sitethief weer in de bocht &gt;:)
pi_138646503
quote:
0s.gif Op dinsdag 8 april 2014 12:55 schreef Sitethief het volgende:

[..]

In de objecten zitten unieke md5 keys ipv een gewone index die ik van de CouchDB terug krijg. Op deze manier heb ik een array met keys die ik gewoon kan gebruiken voor diverse dingen.

Sorteren kan CouchDB gewoon voor mij doen btw.
Je weet dat je Objecten kunt behandelen als arrays? Dan hoef je ze niet eens om te zetten ^^.
  dinsdag 8 april 2014 @ 12:57:07 #8
25889 Sitethief
Fulltime Flapdrol
pi_138646530
quote:
14s.gif Op dinsdag 8 april 2014 12:06 schreef boem-dikkie het volgende:
Ik ben er zelf sowieso van om variabelen te gebruiken die beschrijven wat ze in zich hebben. $toFlip is natuurlijk onduidelijk als de pest, en dat je er een comment blok bij zet die zegt dat je $toFlip een array met objecten is helpt ook vrij weinig.

Maar dat is kwestie van smaak.
Hij heeft de array in zich die geflipt moet worden? $flipArray dan misschien? Het is een globale functie die overal en nergens ingezet moet kunnen worden in principe.
Stroek: Sitethief, die is heel groot en sterk :Y.
Faat: *zucht* zoals gewoonlijk hoor Sitethief weer in de bocht &gt;:)
  dinsdag 8 april 2014 @ 13:04:25 #9
25889 Sitethief
Fulltime Flapdrol
pi_138646793
quote:
0s.gif Op dinsdag 8 april 2014 12:56 schreef totalvamp het volgende:

[..]

Je weet dat je Objecten kunt behandelen als arrays? Dan hoef je ze niet eens om te zetten ^^.
Ik zet niks om? Maar hoe bedoel je?

Dit zijn de soort arrays die die functie moet omzetten.
1
2
3
4
5
6
7
8
9
10
<?php
Array
(
    [
0] => stdClass Object
        
(
            [
id] => 106434159d04626babfa1f4c81d3d0b2
            
[value] => ....
        )
}
?>
Stroek: Sitethief, die is heel groot en sterk :Y.
Faat: *zucht* zoals gewoonlijk hoor Sitethief weer in de bocht &gt;:)
pi_138647147
quote:
0s.gif Op dinsdag 8 april 2014 13:04 schreef Sitethief het volgende:

[..]

Ik zet niks om? Maar hoe bedoel je?

Dit zijn de soort arrays die die functie moet omzetten.
[ code verwijderd ]

Nouja je zet het nu dus om van dat naar dit?
1
2
3
4
5
6
7
8
9
10
<?php
Array
(
    [
106434159d04626babfa1f4c81d3d0b2] => stdClass Object
        
(
            [
id] => 106434159d04626babfa1f4c81d3d0b2
            
[value] => ....
        )
}
?>
  dinsdag 8 april 2014 @ 13:15:06 #11
25889 Sitethief
Fulltime Flapdrol
pi_138647180
quote:
0s.gif Op dinsdag 8 april 2014 13:13 schreef totalvamp het volgende:

[..]

Nouja je zet het nu dus om van dat naar dit?
[ code verwijderd ]

Klopt. Is er een betere methode? Dit was het beste wat ik zelf kon bedenken.
Stroek: Sitethief, die is heel groot en sterk :Y.
Faat: *zucht* zoals gewoonlijk hoor Sitethief weer in de bocht &gt;:)
pi_138647303
quote:
0s.gif Op dinsdag 8 april 2014 13:15 schreef Sitethief het volgende:

[..]

Klopt. Is er een betere methode? Dit was het beste wat ik zelf kon bedenken.
Nouja wat is er mis met de waarde direct uit het object aanroepen? Welke probleem moet dit een oplossing voor zijn?

Nu heb je bijvoorbeeld:
1
2
3
4
5
6
7
<?php
$lengthArray 
count($data);
for(
$i=0;$i<$lengthArray;$i++) {
  
$id $data[$i]->id;
  
$id $data[$i]['id'];
}
?>

Dus sowieso al toegang daartoe.

[ Bericht 1% gewijzigd door #ANONIEM op 08-04-2014 13:18:40 ]
  dinsdag 8 april 2014 @ 13:23:06 #13
25889 Sitethief
Fulltime Flapdrol
pi_138647491
quote:
0s.gif Op dinsdag 8 april 2014 13:18 schreef totalvamp het volgende:

[..]

Nouja wat is er mis met de waarde direct uit het object aanroepen? Welke probleem moet dit een oplossing voor zijn?

Nu heb je bijvoorbeeld:
[ code verwijderd ]

Dus sowieso al toegang daartoe.
Omdat ik die array op meerdere plekken binnen een class nodig heb voor het opbouwen van verschillende dingen deels gebaseerd op dat ID, ik wil er dan niet iedere keer doorheen loopen of zoeken maar gewoon de key kunnen gebruiken om de juiste data te selecteren.
Stroek: Sitethief, die is heel groot en sterk :Y.
Faat: *zucht* zoals gewoonlijk hoor Sitethief weer in de bocht &gt;:)
pi_138647659
quote:
0s.gif Op dinsdag 8 april 2014 13:23 schreef Sitethief het volgende:

[..]

Omdat ik die array op meerdere plekken binnen een class nodig heb voor het opbouwen van verschillende dingen deels gebaseerd op dat ID, ik wil er dan niet iedere keer doorheen loopen of zoeken maar gewoon de key kunnen gebruiken om de juiste data te selecteren.
Heb je voorbeelden? Ik neem aan dat je voor veel dingen maar 1 van de objecten nodig hebt voor data?

Even een klein voorbeeld van hoe ik er nu van uitga dat je het nodig hebt
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
class Foo {
  private 
$data = array();

  public function 
remove($id) {
     unset(
$this->data[$id]);
  }

  public function 
check($id) {
    
check($this->data[$id]);
  }
}
?>
  dinsdag 8 april 2014 @ 13:36:10 #15
25889 Sitethief
Fulltime Flapdrol
pi_138647972
quote:
0s.gif Op dinsdag 8 april 2014 13:27 schreef totalvamp het volgende:

[..]

Heb je voorbeelden? Ik neem aan dat je voor veel dingen maar 1 van de objecten nodig hebt voor data?

Even een klein voorbeeld van hoe ik er nu van uitga dat je het nodig hebt
[ code verwijderd ]

Inderdaad, maar ook complexere dingen, zoals kijken of bepaalde gebruikers recht hebben op de data erin gebaseerd op de context, lijsten in HTML bouwen van data uit value met andere items op ID eraan gelinked etc. Dit is stukken makkelijker als ik alle items gewoon op ID kan vinden.
Stroek: Sitethief, die is heel groot en sterk :Y.
Faat: *zucht* zoals gewoonlijk hoor Sitethief weer in de bocht &gt;:)
pi_138648269
quote:
0s.gif Op dinsdag 8 april 2014 13:36 schreef Sitethief het volgende:

[..]

Inderdaad, maar ook complexere dingen, zoals kijken of bepaalde gebruikers recht hebben op de data erin gebaseerd op de context, lijsten in HTML bouwen van data uit value met andere items op ID eraan gelinked etc. Dit is stukken makkelijker als ik alle items gewoon op ID kan vinden.
Inderdaad, al zou ik het zelf anders hebben gedaan (niet persee beter, maar anders, waarschijnlijk meer resources uiteindelijk).
In dat geval is je huidige code (op wat checks na) gewoon goed en moet je zelf even testen of je for of foreach gebruikt.

Bij je foreach kun je $k weghalen aangezien je die niet gebruikt.
  dinsdag 8 april 2014 @ 13:44:45 #17
25889 Sitethief
Fulltime Flapdrol
pi_138648345
quote:
0s.gif Op dinsdag 8 april 2014 13:42 schreef totalvamp het volgende:

[..]

Inderdaad, al zou ik het zelf anders hebben gedaan (niet persee beter, maar anders, waarschijnlijk meer resources uiteindelijk).
In dat geval is je huidige code (op wat checks na) gewoon goed en moet je zelf even testen of je for of foreach gebruikt.

Bij je foreach kun je $k weghalen aangezien je die niet gebruikt.
Het verschil is snelheid is er nauwelijks momenteel bij mijn kleine testcase, maar hoe meer er in de array zit hoe meer foreach volgens mij aan geheugen kost omdat die een kopie van de array maakt, dan is for volgens mij gewoon beter, ook omdat de keys altijd een index zijn.
Stroek: Sitethief, die is heel groot en sterk :Y.
Faat: *zucht* zoals gewoonlijk hoor Sitethief weer in de bocht &gt;:)
pi_138648505
quote:
0s.gif Op dinsdag 8 april 2014 13:44 schreef Sitethief het volgende:

[..]

Het verschil is snelheid is er nauwelijks momenteel bij mijn kleine testcase, maar hoe meer er in de array zit hoe meer foreach volgens mij aan geheugen kost omdat die een kopie van de array maakt, dan is for volgens mij gewoon beter, ook omdat de keys altijd een index zijn.
Doe een foreach by reference.
Nadeel van for is de count($array), hier maakt hij ook een kopie bij aan. en bij de foreach dus niet.
  dinsdag 8 april 2014 @ 14:25:51 #19
25889 Sitethief
Fulltime Flapdrol
pi_138649964
quote:
0s.gif Op dinsdag 8 april 2014 13:48 schreef totalvamp het volgende:

[..]

Doe een foreach by reference.
Nadeel van for is de count($array), hier maakt hij ook een kopie bij aan. en bij de foreach dus niet.
Ik vind reference altijd een redelijk lastig concept :X , dus ik denk dat ik het bij de for loop houd voor nu.

Trouwens, ik kan dat niet terug vinden wat jij zegt over count. Wel dat dat aantal opgeslagen is bij de array zelf. (zie o.a. http://stackoverflow.com/(...)-o1-or-on-for-arrays)

[ Bericht 16% gewijzigd door Sitethief op 08-04-2014 14:34:20 ]
Stroek: Sitethief, die is heel groot en sterk :Y.
Faat: *zucht* zoals gewoonlijk hoor Sitethief weer in de bocht &gt;:)
pi_138650220
quote:
0s.gif Op dinsdag 8 april 2014 14:25 schreef Sitethief het volgende:

[..]

Ik vind reference altijd een redelijk lastig concept :X , dus ik denk dat ik het bij de for loop houd voor nu.
Hoezo lastig? je hoeft er alleen een & voor te zetten :P
  dinsdag 8 april 2014 @ 14:35:08 #21
25889 Sitethief
Fulltime Flapdrol
pi_138650324
quote:
0s.gif Op dinsdag 8 april 2014 14:32 schreef totalvamp het volgende:

[..]

Hoezo lastig? je hoeft er alleen een & voor te zetten :P
Ik kijk er dan twee weken later over heen dat er & staat als ik die functie ga gebruiken en rare dingen zie gebeuren :D. Goed documenteren dus :P.
Stroek: Sitethief, die is heel groot en sterk :Y.
Faat: *zucht* zoals gewoonlijk hoor Sitethief weer in de bocht &gt;:)
pi_138650523
quote:
0s.gif Op dinsdag 8 april 2014 14:35 schreef Sitethief het volgende:

[..]

Ik kijk er dan twee weken later over heen dat er & staat als ik die functie ga gebruiken en rare dingen zie gebeuren :D. Goed documenteren dus :P.
Ja je moet wel oppassen met referenties :P

Als je echt veel data gaat gebruiken zou ik adviseren dit even door te lezen:

http://matthewturland.com/2010/05/20/new-spl-features-in-php-5-3/
  dinsdag 8 april 2014 @ 14:47:11 #23
25889 Sitethief
Fulltime Flapdrol
pi_138650723
quote:
0s.gif Op dinsdag 8 april 2014 14:40 schreef totalvamp het volgende:

[..]

Ja je moet wel oppassen met referenties :P

Als je echt veel data gaat gebruiken zou ik adviseren dit even door te lezen:

http://matthewturland.com/2010/05/20/new-spl-features-in-php-5-3/
Oh boy :D , ik had al een keertje een ArrayIterator gebruikt ergens. Heap klinkt erg interessant voor een aantal dingen die ik wil doen :D.
Stroek: Sitethief, die is heel groot en sterk :Y.
Faat: *zucht* zoals gewoonlijk hoor Sitethief weer in de bocht &gt;:)
pi_138650801
quote:
0s.gif Op dinsdag 8 april 2014 14:47 schreef Sitethief het volgende:

[..]

Oh boy :D , ik had al een keertje een ArrayIterator gebruikt ergens. Heap klinkt erg interessant voor een aantal dingen die ik wil doen :D.
Ja staat leuke info bij :D wel wat hoger niveau, maar juist leuk om nieuwe dingen te leren.
Ik heb er zelf nog geen gebruik van hoeven maken, misschien kan ik bij mijn huidige werk wat dingen implementeren ooit :P
pi_138714084
Ik ben bezig met een project om mijn slimme meter uit te lezen en maak hier vervolgens een grafiek van.

Ik krijg de resultaten te zien als:
0000.00

Dus 0000.38 is 380 Watt
Dus 0012.21 is 12210 Watt

Met welke functie kan je deze getallen omzetten?

[ Bericht 1% gewijzigd door xaban06 op 10-04-2014 00:10:30 ]
abonnement Unibet Coolblue
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')