[php] object in array (simpel?) vraagje

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Altaphista
  • Registratie: Juli 2001
  • Laatst online: 12:50

Altaphista

1. check manual, 2. ask

Topicstarter
Een collega van mij was bezig met wat php en stelde mij onderstaande vraag, maar ik kom er ook niet uit... (het is erg lang geleden voor mij)

Via een script krijgt ie de query gegevens uit een tabel terug in een Object, en de relationele db-gegevens vervolgens weer in een object daar binnen.

Eerst de code van print_r($result):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Object
(
    [type] => Tabel
    [fields] => stdClass Object
        (
            [veldnaam1] => stringwaarde1
            [veldnaam2] => stringwaarde2
            etc
            [1] => Object
                (
                    [type] => Relationele tabel
                    [fields] => stdClass Object
                        (
                            [veldnaam1] => stringwaarde3
                            etc
                        )
                )
        )
)


Dan de vraag:
Hoe plemp je die waardes (stringwaardeN) nou netjes neer? Met gewoon mysql query is het simpel, maar nu zit het al in een object, en met een foreach lukt de waardes stringwaarde1 en 2 wel, maar met 3 loop ik vast. Hoe doe ik dit simpel? En als het erg makkelijk kan, ik zie het niet (meer) :) 8)7
PHP:
1
2
3
4
5
foreach ($resultArray as $record) {
        echo $record->fields->veldnaam1;
        // maar hoe krijg ik veldnaam1 van stringwaarde3  ???
        
}

Je gaat het pas zien als je het doorhebt.


Acties:
  • 0 Henk 'm!

  • DumbAss
  • Registratie: April 2002
  • Laatst online: 16-08 11:30
zoiets?

PHP:
1
2
foreach($arrays as $key => $value) {
}

Vanutsteen.nl => nerds only | iRacing


Acties:
  • 0 Henk 'm!

  • Altaphista
  • Registratie: Juli 2001
  • Laatst online: 12:50

Altaphista

1. check manual, 2. ask

Topicstarter
nee werkt ook niet, het gaat me er dus om dat ik die strings wel kan accessen, maar op het moment dat ie weer een object tegenkomt kan ik er niet bij.
PHP:
1
2
3
$record->fields->veldnaam1; //string | werkt

$record->fields->1 ; //Object | werkt niet

Je gaat het pas zien als je het doorhebt.


Acties:
  • 0 Henk 'm!

Verwijderd

Het komt meer door die slecht gekozen 'naam' voor die variabele: '1'. Dat is een ongeldige naam. Kies voor fatsoenlijke namen voor variabelen en properties, dus laat ze beginnen met een letter of underscore.

Acties:
  • 0 Henk 'm!

  • Altaphista
  • Registratie: Juli 2001
  • Laatst online: 12:50

Altaphista

1. check manual, 2. ask

Topicstarter
Verwijderd schreef op woensdag 26 november 2008 @ 07:29:
Het komt meer door die slecht gekozen 'naam' voor die variabele: '1'. Dat is een ongeldige naam. Kies voor fatsoenlijke namen voor variabelen en properties, dus laat ze beginnen met een letter of underscore.
dat is dus het probleem, ik krijg de array zo terug, kan er niets aan veranderen. (salesforce ...)

Je gaat het pas zien als je het doorhebt.


Acties:
  • 0 Henk 'm!

  • RAJH
  • Registratie: Augustus 2001
  • Niet online
Je zou kunnen proberen om het object te casten naar een array, misschien kun je er dan wel bij.

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

RAJH schreef op woensdag 26 november 2008 @ 08:00:
Je zou kunnen proberen om het object te casten naar een array, misschien kun je er dan wel bij.
Dat zal nooit werken, je moet handmatig loopen erover, met een recursieve functie.
Verwijderd schreef op woensdag 26 november 2008 @ 07:29:
Het komt meer door die slecht gekozen 'naam' voor die variabele: '1'. Dat is een ongeldige naam. Kies voor fatsoenlijke namen voor variabelen en properties, dus laat ze beginnen met een letter of underscore.
Slechtgekozen zou ik niet zeggen, die [1] is een 'subobject' van 'fields', dus zo slecht is dat niet, je fields even nummeren.

Wat gek is dat dat werkt (hoe heeft salesforce dat gedaan?), want normaal kan je dat gewoonweg niet toewijzen.
PHP:
1
2
$object = new stdobject();
$object->1 = "werkt niet";

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

Verwijderd

Snake schreef op woensdag 26 november 2008 @ 08:07:

Slechtgekozen zou ik niet zeggen, die \[1] is een 'subobject' van 'fields', dus zo slecht is dat niet, je fields even nummeren.
Die fields property bevat een object, géén array. Het is dus wél een ongeldige en dus verkeerd gekozen naam.
Wat gek is dat dat werkt (hoe heeft salesforce dat gedaan?), want normaal kan je dat gewoonweg niet toewijzen.
PHP:
1
2
$object = new stdobject();
$object->1 = "werkt niet";
Dat doen ze "gewoon" zo:
PHP:
1
2
$object = new stdClass ();
$object->{1} = "werkt wel";

Maar zoals gezegd is dat gewoon ranzig.

Acties:
  • 0 Henk 'm!

  • Altaphista
  • Registratie: Juli 2001
  • Laatst online: 12:50

Altaphista

1. check manual, 2. ask

Topicstarter
hmmm ja, je krijgt dus een soort workaround voor een workaround terwijl het ook simpel kan... nouja iig bedankt voor de hulp :)

Je gaat het pas zien als je het doorhebt.


Acties:
  • 0 Henk 'm!

  • RAJH
  • Registratie: Augustus 2001
  • Niet online
Snake schreef op woensdag 26 november 2008 @ 08:07:
[...]

Dat zal nooit werken, je moet handmatig loopen erover, met een recursieve functie.
[...]

Slechtgekozen zou ik niet zeggen, die \[1] is een 'subobject' van 'fields', dus zo slecht is dat niet, je fields even nummeren.

Wat gek is dat dat werkt (hoe heeft salesforce dat gedaan?), want normaal kan je dat gewoonweg niet toewijzen.
PHP:
1
2
$object = new stdobject();
$object->1 = "werkt niet";
Even een simpele functie gemaakt ;)

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
function objectToArray($object)
{
    if (!is_object($object)) return false;
    
    $objectOut = (array) $object;
    
    foreach ($objectOut as &$value)
    {
        if (is_object($value))
        {
            $value = objectToArray($value);
        }
    }
    
    return $objectOut;
}

$objClass = new stdClass();
$objClass->type = 'Tabel';
$objClass->fields = new stdClass();
$objClass->fields->veldnaam1 = 'stringwaarde1';
$objClass->fields->veldnaam2 = 'stringwaarde2';
$objClass->fields->{1}       = new stdClass();
$objClass->fields->{1}->type = 'Relationele tabel';
$objClass->fields->{1}->fields = new stdClass();
$objClass->fields->{1}->fields->veldnaam1 = 'stringwaarde3';

echo '<pre>';
print_r($objClass);

/*
stdClass Object
(
    [type] => Tabel
    [fields] => stdClass Object
        (
            [veldnaam1] => stringwaarde1
            [veldnaam2] => stringwaarde2
            [1] => stdClass Object
                (
                    [type] => Relationele tabel
                    [fields] => stdClass Object
                        (
                            [veldnaam1] => stringwaarde3
                        )

                )

        )

)
*/

print_r(objectToArray($objClass));
/*
Array
(
    [type] => Tabel
    [fields] => Array
        (
            [veldnaam1] => stringwaarde1
            [veldnaam2] => stringwaarde2
            [1] => Array
                (
                    [type] => Relationele tabel
                    [fields] => Array
                        (
                            [veldnaam1] => stringwaarde3
                        )

                )

        )

)
*/

Acties:
  • 0 Henk 'm!

  • Altaphista
  • Registratie: Juli 2001
  • Laatst online: 12:50

Altaphista

1. check manual, 2. ask

Topicstarter
koning :)

Je gaat het pas zien als je het doorhebt.

Pagina: 1