[PHP] Probleem met array's

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb nu deze code
PHP:
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
27
require_once('use_mysqlconnect.php');
require_once('func_getpath.php');

function getlatestcontent($items, $inc_array, $recursive) {
    if(!is_array($inc_array))
    $inc_array=array($inc_array);
    
    $query="SELECT * FROM `content` ORDER BY `date` DESC";
    $result=mysql_query($query) or die(MySQL_Error());  
    
    $i=0;
    while($row=mysql_fetch_assoc($result)) {
        if($recursive==1) { 
            $path=getpath($row['id']);
            foreach($path AS $key) {
                if(in_array($key, $inc_array))
                $latest[$i]=$row; //hier gaatie mis volgens mij
            }
        }
        else {
            if(in_array($row['page'], $inc_array))
            $latest[$i]=$row;
        }
        $i++;
    }
    echo $latest[0];
}


Nu is deze code nog niet af maar iets vreemds doet zich nu voor.

(zie comment in code)

ik wil dus $latest een 2 dimensionale array met i als eerste (ding) en vervolgens alle pagina info....
Maar om de een of andere reden blijft $latest unset terwijl $row wel bestaat. Weet iemand wat ik fout doe?

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op maandag 18 mei 2009 @ 22:20:
Ik heb nu deze code
PHP:
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
27
require_once('use_mysqlconnect.php');
require_once('func_getpath.php');

function getlatestcontent($items, $inc_array, $recursive) {
    if(!is_array($inc_array))
    $inc_array=array($inc_array);
    
    $query="SELECT * FROM `content` ORDER BY `date` DESC";
    $result=mysql_query($query) or die(MySQL_Error());  
    
    $i=0;
    while($row=mysql_fetch_assoc($result)) {
        if($recursive==1) { 
            $path=getpath($row['id']);
            foreach($path AS $key) {
                if(in_array($key, $inc_array))
                $latest[$i]=$row; //hier gaatie mis volgens mij
            }
        }
        else {
            if(in_array($row['page'], $inc_array))
            $latest[$i]=$row;
        }
        $i++;
    }
    echo $latest[0];
}
Volgens mij mis ik ergens iets, is $latest wel een array?
Sowieso kan het zijn dat $latest[0] ook unset is, aangezien $recursive niet persé 1 hoeft te zijn en het kan dus voorkomen dat $latest[0] niet geset wordt (eerste loop bij $recursive = 0)

[ Voor 0% gewijzigd door Verwijderd op 18-05-2009 22:36 . Reden: niet goed gelezen... ]


Acties:
  • 0 Henk 'm!

Verwijderd

Waar initialiseer je $latest als array dan?
PHP:
1
$latest = array ();

Zou je dat niet even netjes doen voor de while loop?
Verder hoef je $i niet bij te houden en kun je gewoon $latest[]= gebruiken om iets aan de $latest array toe te voegen.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op maandag 18 mei 2009 @ 22:32:
Sowieso kan het zijn dat $latest\[0] ook unset is, aangezien $recursive niet persé 1 hoeft te zijn en het kan dus voorkomen dat $latest\[0] niet geset wordt (eerste loop bij $recursive = 0)
Waarom zeg je dat je verkeerd gelezen hebt? Wat hier staat klopt gewoon. Weliswaar niet om je $recursive argument, maar wel omdat alle assignments aan de array binnen een if(in_array(...)) staan (die dus niet uitgevoerd hoeven te worden), maar $i wel altijd iedere iteratie opgehoogd wordt.

Aan de TS: probeer je de array toevallig uit te lezen buiten de functie? Variable scope in PHP

[ Voor 17% gewijzigd door .oisyn op 18-05-2009 23:21 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op maandag 18 mei 2009 @ 22:33:
Waar initialiseer je $latest als array dan?
PHP:
1
$latest = array ();

Zou je dat niet even netjes doen voor de while loop?
Verder hoef je $i niet bij te houden en kun je gewoon $latest[]= gebruiken om iets aan de $latest array toe te voegen.
bedankt voor de tip, helaas haalt ook dit niets uit voor de code dit regeltje geplant maar zonder resultaat. Ook het gebruik van $latest[] werkt niet....

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Nu nog het antwoord van de eerste vraag van Cheetah, gecombineerd met je reactie op de opmerking van .oisyn over scope.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Geef aub aan hoe je de functie aanroept. Bovendien weten wij ook niet wat getpath() doet, als die functie troep terug geeft gebeurt er ook niet al te veel.

Verder komt het gewoon aan op debuggen, kijk met var_dump() wat elke variabele op de belangrijke punten is...

{signature}


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De functie wordt aangeroepen door:
PHP:
1
2
require_once('func_getlatestcontent.php');
getlatestcontent(2, 'home', 1);


getpath maakt een array, met opeenvolgende pagina's. Primair bedoelt om een kruimelbad (breadcrumbs) uit te rekenen:
PHP:
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
27
28
29
30
31
32
33
34
35
36
37
38
39
require_once('use_mysqlconnect.php');

function getpath($id) {
    $id=mysql_real_escape_string($id);
    $id_self=$id;
    
    $i=0;
    $loop=1;
    while($loop==1) {
        $query="SELECT `parent` FROM `content` WHERE id='$id'";
        $result=mysql_query($query) or die(MySQL_Error());
        if(!mysql_num_rows($result)==0)
        $id=mysql_result($result, 0);
        if(!$id==NULL) {
            $query="SELECT `page` FROM `content` WHERE id='$id'";
            $result=mysql_query($query) or die(MySQL_Error());
            $path[$i]=mysql_result($result, 0);
        }
        else
        $loop=0;
        
        $i++;
    }
        $i=0;
        if(is_array($path)) {
            $path=array_reverse($path);
            $i=count($path);
        }
        
        $query="SELECT `page` FROM `content` WHERE id='$id_self'";
        if(!mysql_num_rows($result)==0) {
            $result=mysql_query($query) or die(MySQL_Error());
            $page=mysql_result($result, 0);
            
            $path[$i]=$page;
        }
        
        return $path;
}

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Maar waaruit blijkt nou precies dat $latest leeg is?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
alles (echo, print_r, var_dump etc... etc...) ik ben er inmiddels achter dat $row in het if(in_array($key, $inc_array)) stuk ook unset is maar daar buiten gewoon de waarde array heeft.

Dus:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(...)
if($recursive==1) {     
            $path=getpath($row['id']); 
            foreach($path AS $key) { 
                echo $row; //array
                if(in_array($key, $inc_array)) 
                {
                echo $row; //niets
                }

                echo $row; //array
            } 
           
        } 
(...)

???


EDIT:

Bijzonder dom, maar ik heb helemaal over het hoofd gezien dat die if conditie gewoon niet waar is en de code dus niet wordt uigevoerd. Nu nog ff zoeken naar WAAROM die niet waar is.

EDIT:

Case-Sensitive |:( 8)7

[ Voor 16% gewijzigd door Verwijderd op 19-05-2009 17:31 ]

Pagina: 1