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; } ?> |
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.quote: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.
Je weet dat je Objecten kunt behandelen als arrays? Dan hoef je ze niet eens om te zetten ^^.quote: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.
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.quote: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.
Ik zet niks om? Maar hoe bedoel je?quote: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 ^^.
1 2 3 4 5 6 7 8 9 10 | <?php Array ( [0] => stdClass Object ( [id] => 106434159d04626babfa1f4c81d3d0b2 [value] => .... ) } ?> |
Nouja je zet het nu dus om van dat naar dit?quote: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 ]
1 2 3 4 5 6 7 8 9 10 | <?php Array ( [106434159d04626babfa1f4c81d3d0b2] => stdClass Object ( [id] => 106434159d04626babfa1f4c81d3d0b2 [value] => .... ) } ?> |
Klopt. Is er een betere methode? Dit was het beste wat ik zelf kon bedenken.quote:Op dinsdag 8 april 2014 13:13 schreef totalvamp het volgende:
[..]
Nouja je zet het nu dus om van dat naar dit?
[ code verwijderd ]
Nouja wat is er mis met de waarde direct uit het object aanroepen? Welke probleem moet dit een oplossing voor zijn?quote: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.
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']; } ?> |
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.quote: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.
Heb je voorbeelden? Ik neem aan dat je voor veel dingen maar 1 van de objecten nodig hebt voor data?quote: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.
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]); } } ?> |
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.quote: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, al zou ik het zelf anders hebben gedaan (niet persee beter, maar anders, waarschijnlijk meer resources uiteindelijk).quote: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.
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.quote: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.
Doe een foreach by reference.quote: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.
Ik vind reference altijd een redelijk lastig concept , dus ik denk dat ik het bij de for loop houd voor nu.quote: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.
Hoezo lastig? je hoeft er alleen een & voor te zettenquote:Op dinsdag 8 april 2014 14:25 schreef Sitethief het volgende:
[..]
Ik vind reference altijd een redelijk lastig concept , dus ik denk dat ik het bij de for loop houd voor nu.
Ik kijk er dan twee weken later over heen dat er & staat als ik die functie ga gebruiken en rare dingen zie gebeuren . Goed documenteren dus .quote:Op dinsdag 8 april 2014 14:32 schreef totalvamp het volgende:
[..]
Hoezo lastig? je hoeft er alleen een & voor te zetten
Ja je moet wel oppassen met referentiesquote: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 . Goed documenteren dus .
Oh boy , ik had al een keertje een ArrayIterator gebruikt ergens. Heap klinkt erg interessant voor een aantal dingen die ik wil doen .quote:Op dinsdag 8 april 2014 14:40 schreef totalvamp het volgende:
[..]
Ja je moet wel oppassen met referenties
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/
Ja staat leuke info bij wel wat hoger niveau, maar juist leuk om nieuwe dingen te leren.quote:Op dinsdag 8 april 2014 14:47 schreef Sitethief het volgende:
[..]
Oh boy , ik had al een keertje een ArrayIterator gebruikt ergens. Heap klinkt erg interessant voor een aantal dingen die ik wil doen .
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |