[PHP] Var uit array wil niet echo'n

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • xiD
  • Registratie: Oktober 2003
  • Laatst online: 09:21
Ik heb de volgende array:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Array
(
    [0] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [order] => email
                    [width] => 75%
                    [dbfield] => email
                )

            [0] => Email
        )
)


Deze array wordt uitgelezen uit een xml-bestand. Wanneer ik nu de volgende code gebruik:
code:
1
2
3
foreach($array as $column) { 
        echo $column[0];
}


Dan zou er 'Email' als output moeten komen. Maar ik krijg niets te zien. Als ik bijvoorbeeld $column['width'] echo komt er wel netjes 75% uitrollen.

En dit wil ook niet werken:
code:
1
echo $array[0][0];


Ik heb error_reporting op all en krijg geen warnings te zien. Ook werkt het wel op een lokale WAMP installatie.

Iemand enig idee wat dit kan zijn?

67890


Acties:
  • 0 Henk 'm!

  • fleppuhstein
  • Registratie: Januari 2002
  • Laatst online: 07-09 13:37
Doe eens een
PHP:
1
print_r($array);


of in je for each loop:

PHP:
1
print_r($column);


Om te kijken wat er echt in je array zit. Misschien wordt hij wel niet goed geset.

[ Voor 20% gewijzigd door fleppuhstein op 19-06-2008 11:27 ]


Acties:
  • 0 Henk 'm!

  • xiD
  • Registratie: Oktober 2003
  • Laatst online: 09:21
Dit is wel goed gevuld, hij wil namelijk wel $column[width] echo'n. Maar even voor de zekerheid:
code:
1
2
3
4
5
6
7
8
9
10
11
SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [order] => email
            [width] => 75%
            [dbfield] => email
        )

    [0] => Email
)


Dit is in mn foreach. Echo van mn $array staat al bovenaan 1ste post.

[ Voor 10% gewijzigd door xiD op 19-06-2008 11:29 ]

67890


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
[0] is hier geen element van die attributes array. Ds als enkel 0 door 'width' vervangen werkt, ben je met de verkeerde array bezig. Laat eens de code van de assignments zien.

{signature}


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Geeft 'echo $array[0][1]' dan wel '75%' terug? Kun je een associatieve gevulde array wel benaderen op de index?

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • Eegee
  • Registratie: Januari 2000
  • Laatst online: 20-09 23:09
Er zitten toch objecten in je array... moet je dan niet ->0 doen i.p.v. [0] ?

edit: simplexml levert kennelijk afwijkend opgebouwde objecten terug 8)7 , dus -> gaat niet werken.

[ Voor 41% gewijzigd door Eegee op 19-06-2008 12:18 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Eegee schreef op donderdag 19 juni 2008 @ 11:30:
Er zitten toch objecten in je array... moet je dan niet ->0 doen i.p.v. [0] ?
Dat dus

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Kijk eens naar array_values() en array_keys().

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

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

Janoz

Moderator Devschuur®

!litemod

ik heb de significante dingen maar even bold gemaakt...



Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[order] => email
[width] => 75%
[dbfield] => email
)

[0] => Email
)
)

en

SimpleXMLElement Object
(
[@attributes] => Array
(
[order] => email
[width] => 75%
[dbfield] => email
)

[0] => Email
)

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!

  • xiD
  • Registratie: Oktober 2003
  • Laatst online: 09:21
In mn xml staat het volgende:
XML:
1
2
3
4
<view_fields>
    <view_field order="email" width="75%" dbfield="email">Email</view_field>
    <view_field dbfield="quota" width="25%">Quota</view_field>
</view_fields>


Die laad in een array via:
PHP:
1
$this->xml_content = simplexml_load_file($xml_file);


En de array wordt gevuld via de volgende functie:
PHP:
1
2
3
4
5
6
7
8
function getColumns() { 
    $i = 0;
    foreach($this->xml_content->view_fields->view_field as $column) { 
        $array[$i] = $column; 
        $i++; 
    } 
    return $array; 
}
Niemand_Anders schreef op donderdag 19 juni 2008 @ 11:30:
Geeft 'echo $array[0][1]' dan wel '75%' terug? Kun je een associatieve gevulde array wel benaderen op de index?
Nee dat komt er niet terug.

Als het een fout in de manier is waarop ik de array benader, vind ik het raar dat het op een lokale WAMP installatie wel werkt... :?
Eegee schreef op donderdag 19 juni 2008 @ 11:30:
Er zitten toch objecten in je array... moet je dan niet ->0 doen i.p.v. [0] ?
Dit geeft een syntax error.

67890


Acties:
  • 0 Henk 'm!

  • soepah
  • Registratie: December 2006
  • Laatst online: 18-09 16:23
->0 is C achtig (C / C++ en C#)
Ontopic:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Array
(
    [0] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [order] => email
                    [width] => 75%
                    [dbfield] => email
                )

            [0] => Email
        )
)

Als je goed kijkt zie je dat je een array hebt, waarin wederom objecten zitten [0] is een object (xml object) Die je weer aan moet spreken
dus:
code:
1
2
3
4
5
foreach($array as $key => $value){
        foreach($value as $sub_key => $sub_value){
                 print_r($sub_value);
        }
}

zou je objectjes uit moeten printen die je wilt benaderen neem ik aan..
wil je't echter netjes doen zou ik eens googelen op php & XML. (bv simpleXML in PHP)
hiervoor zijn verschillende nette oplossingen geschreven.

wie van vissen houdt, houdt niet van vissen


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 09:34
xiD schreef op donderdag 19 juni 2008 @ 11:42:
In mn xml staat het volgende:
XML:
1
2
3
4
<view_fields>
    <view_field order="email" width="75%" dbfield="email">Email</view_field>
    <view_field dbfield="quota" width="25%">Quota</view_field>
</view_fields>
Als dat echt zo in je XML staat klopt je code niet :)

Hoe het wel werkt:

PHP:
1
2
3
4
foreach($xml_content -> view_field as $column)
    $data[] =  $column;

echo $data[0]; // Levert 'Email' op.


SimpleXMLElement negeert de buitenste tags van de geladen string - zie ook het voorbeeld hier.

Om dit soort geneuzel te voorkomen heb ik ooit eens een class geschreven die een SimpleXMLElement omzet in een PHP array, hier. Gebruik'm tegenwoordig niet meer (het is vaak veel handiger direct met het object te werken in mijn ervaring) maar is wellicht nuttig :)

[ Voor 9% gewijzigd door FragFrog op 19-06-2008 12:51 ]

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • daniëlpunt
  • Registratie: Maart 2004
  • Niet online

daniëlpunt

monkey's gone to heaven

Eegee schreef op donderdag 19 juni 2008 @ 11:30:
Er zitten toch objecten in je array... moet je dan niet ->0 doen i.p.v. [0] ?

edit: simplexml levert kennelijk afwijkend opgebouwde objecten terug 8)7 , dus -> gaat niet werken.
$Object->0 gaat nooit werken, want variabelen kunnen niet beginnen met een cijfer. :)

PHP:
1
2
3
4
5
6
<?php

$Object = new StdClass;
$Object->0 = 'Foo';

?>


Levert een mooie parse error op.

En voor de TS : Volgens mij moet dit werken, als je die andere attributen niet nodig hebt. :)
PHP:
1
2
3
4
5
function getColumns() {
    foreach($this->xml_content->view_fields->view_field as $column)
        $array[] = (string) $column;
    return $array;  
}

Acties:
  • 0 Henk 'm!

  • xiD
  • Registratie: Oktober 2003
  • Laatst online: 09:21
Nee mn xml is nog wel wat groter, de xml wordt goed in de array geladen.

Wat ik nog steeds raar vind en wat ik ook al eerder zei is dat het op een lokale WAMP installatie wel werkt. Het enige verschil daarin is de PHP versie 5.2.0-8 extern en 5.2.5 in WAMP.

@super-muffin: de overige attributen heb ik wel nodig :+
@stefboerrigter: doet t ook niet

Ik heb het nu op de volgende manier opgelost:
PHP:
1
2
3
4
5
6
7
8
9
function getColumns() { 
    $i = 0;
    foreach($this->xml_content->view->view_fields->view_field as $column) { 
        $array[$i] = $column; 
        $array[$i]['naam'] = (string) $column;          
        $i++; 
    } 
    return $array; 
}


Ik echo nu ipv $colum[0], $column['naam']. Naam komt hierdoor bij de attributen te staan in de array, en die kan ik wel aanroepen.

67890

Pagina: 1