Avatar billede limemedia Nybegynder
12. februar 2008 - 12:32 Der er 3 kommentarer og
1 løsning

data_seek paa array

I et system hvor jeg har brug for transperent at kunne tilgaa et mysql resultatsaet direkte fra databasen eller fra memcached, har jeg lavet et objekt der kopierer den noedvendige funktionalitet fra mysql

Koden er her, det er vist ikke rumteknologi :)

---
    class cacheMySQL {
        private $rs = array();
        public $num_rows = 0;

        public function __construct($resultset) {
            while ($foo = $resultset->fetch_assoc()) $this->rs[] = $foo;
            $this->num_rows = sizeof($this->rs);
            reset($this->rs);
        }

        public function fetch_assoc() {
            return next($this->rs);
        }

        public function fetch_row() {
            $row = next($this->rs);
            return array_values($row);
        }

        public function data_seek($row) {
            // find a way to make this seek a row and not just loop from the first row
            reset($this->rs);
            if ($row) for ($i=0; $i<$row; $i++) next($this->rs);
        }
    }
---

Funktionen data_seek er ikke optimal da den looper igennem arrayet for at saette den interne pointer hvor jeg har brug for det

Jeg kan ikke finde en funktion i manualen der virker som data_seek, kun current, end, reset osv. Er jeg blind eller er der virkeligt ikke en funktion til dette formaal ?
Avatar billede erikjacobsen Ekspert
12. februar 2008 - 12:42 #1
Du kunne have et index (int) til at slå op med i arrayet, i stedet for current, next etc.
Avatar billede limemedia Nybegynder
12. februar 2008 - 12:48 #2
Mmmm, gad vide hvad der er hurtigere :) array funktionerne eller at vedligeholde en "pointer" direkte i min klasse
Avatar billede erikjacobsen Ekspert
12. februar 2008 - 12:58 #3
Jeg ved det ikke. Men hvis du tit har brug for data_seek, så er det hurtigst med et index.
Avatar billede limemedia Nybegynder
12. februar 2008 - 13:03 #4
sjaeldent, men tak for ideen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester