Just nu i M3-nätverket
Gå till innehåll

array_walk i php


Joakim Andersson

Rekommendera Poster

Joakim Andersson

Hej!

 

För att underlätta hanteringen av MySQL i php3 så har jag skapat en egen liten class som jag använder mig av. Den fungerar bra men nu tänkte jag att jag skulle applicera en funktion på alla data som jag fick ut från databasen innan jag returnerade arrayen men se det gick inte. Så här ser den koden ut:

 

function nextRow ($queryId,$html) {

$this->row = mysql_fetch_array($queryId);

$this->errorNumber = mysql_errno();

$this->errorName = mysql_error();

$stat = is_array($this->row);

if (!stat) {

mysql_free_result($queryId);

} else {

if ($html == 1) {

array_walk($this->row,"$this->database2html");

} else {

array_walk($this->row,"$this->database2form");

}

}

return $stat;

}

 

Skillnaden från förrut är den sista if-delen. Det verkar som om jag inte får någon array från mysql_fetch_array men det ska jag väl få? Felmeddelandet lyder: Warning: Wrong datatype in array_walk() call in dbConnection.inc on line 152 och det verkar inte som om den går in i funtionen alls. Funktionen returnerar just nu bara den sträng den får in så den fungerar.

 

Hjälp snälla!

Länk till kommentar
Dela på andra webbplatser

> Den fungerar bra men nu tänkte jag att jag skulle applicera

> en funktion på alla data som jag fick ut från databasen innan

> jag returnerade arrayen men se det gick inte.

 

Du menar att du försöker ändra innehållet i själva arrayen? Den skall väl skickas som referens i så fall?

 

Lite svårt att veta vad du försöker göra utan att se mer av koden. Du säger ju dock att det fungerade innan du lade till dessa rader, så då borde ju databasanropet fungera.

Länk till kommentar
Dela på andra webbplatser

Joakim Andersson

Jag förstår att det inte är helt enkelt att förstå på den här lilla koden men det blir så vansinnigt mycket om jag ska ta md allt.

 

Jag ska förklara igen. Jag har alltså en klass som i stora drag ser ut som nedan. Givetvis innehåller den mer men det är de viktiga för problemet. query skickar en sq-sats till databasen och tillbaks får man ett id för det resultsetet. För att få nästa rad så använder man nextRow med det föregående id:t och resultatet lagras då i row och kan sedan anropas som en vanlig associativ array. Problemet är nu att när jag la till den sista if-satsen med array_walk så fungerar inte det och den klagar på att row inte är en array tror jag men det ska den nog vara.

 

Tacksam för all hjälp jag kan få.

 

class dbConnection {

 

var $row = array();

 

 

function query ($sqlStmt) {kod för query här}

 

function nextRow ($queryId,$html) {kod för nexRow här}

 

}

Länk till kommentar
Dela på andra webbplatser

För det första hade du behövt använda 'enkelfnuttar' för funktionsnamnet (eftersom det innehåller ett $), men det hjälper dig inte i det här fallet.

 

Skriver man en testfunktion som ligger utanför klassen går det att anropa den med array_walk, så $this->row är onekligen en array. Verkar som om array_walk har problem med att arbeta med klassmetoder helt enkelt. Jag lyckas inte få det att fungera i.a.f.

 

Om du inte hittar någon lösning kanske du kan använda en annan konstruktion? En while-each månne?

Länk till kommentar
Dela på andra webbplatser

Joakim Andersson

Tack så mycket för hjälpen!

 

Jag har försökt med en sådan konstruktion också men inte fått det att fungera.

Länk till kommentar
Dela på andra webbplatser

Joakim Andersson

Tack för hjälpen Robban. Jag lyckades få ordning på det. Om du är intresserad av hu så ser den ut så här nu. Det är inte vackert men det fungerar.

 

function nextRow ($queryId,$html) {

$this->row = mysql_fetch_array($queryId);

$stat = is_array($this->row);

if (!stat) {

mysql_free_result($queryId);

} else {

$theRow = (array) $this->row;

$theNewRow = array ();

while (list($tmp1,$tmp2) = each ($theRow)) {

list($key,$value) = each($theRow);

if ($html == 1) {

$theNewRow[$key] = $this->database2html($value);

} else {

$theNewRow[$key] = $this->database2form($value);

}

}

$this->row = $theNewRow;

}

return $stat;

}

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...