array to object

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Top Low-Code Developer Gezocht!

Bedrijfsomschrijving Unieke Kansen, Uitstekende Arbeidsvoorwaarden & Inspirerend Team Wij zijn een toonaangevende, internationale organisatie die de toekomst van technologie vormgeeft door het creëren van innovatieve en baanbrekende oplossingen. Ons succes is gebaseerd op een hecht en gepassioneerd team van professionals die altijd streven naar het overtreffen van verwachtingen. Als jij deel wilt uitmaken van een dynamische, vooruitstrevende en inspirerende werkomgeving, dan is dit de perfecte kans voor jou! Functieomschrijving Als Low-Code Developer ben je een cruciaal onderdeel van ons team. Je werkt samen met collega's uit verschillende disciplines om geavanceerde applicaties te ontwikkelen en te optimaliseren met behulp van Low-code

Bekijk vacature »

Ventilatiesysteem Productontwikkelaar HBO WO Verwa

Samengevat: Zij bieden flexibele ventilatiematerialen, geluidsdempers, rookgasafvoer producten en industrieslangen. Ben jij een technisch productontwikkelaar? Heb jij ervaring met het ontwikkelen van nieuwe producten? Vaste baan: Technisch Productontwikkelaar HBO WO €3.000 - €4.000 Zij bieden een variëteit aan flexibele ventilatiematerialen, geluiddempers, rookgasafvoer producten, industrieslangen en ventilatieslangen voor de scheepsbouw. Met slimme en innovatieve materialen zorgen wij voor een gezonde en frisse leefomgeving. Deze werkgever is een organisatie die volop in ontwikkeling is met hardwerkende collega's. Dit geeft goede ontwikkelingsmogelijkheden. De branche van dit bedrijf is Techniek en Engineering. Functie: Voor de vacature als Technisch Productontwikkelaar Ede Gld HBO WO ga

Bekijk vacature »

Ozzie PHP

Ozzie PHP

31/01/2013 22:07:20
Quote Anchor link
Hallo,

Ik heb dit lang geleden als eens geprobeerd en toen kreeg ik het niet exact voor elkaar zoals ik wilde. Daarom zal ik de vraag nog eens stellen... ik ben benieuwd of het uberhaupt mogelijk is.

Ik wil een array met paden omzetten naar een object. Ik heb bijvoorbeeld de volgende paden:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$paths
= array();
$paths['public'] = '/home/xxx/public_html/';
$paths['public']['content'] = '/home/xxx/public_html/content/';
$paths['public']['content']['images'] = '/home/xxx/public_html/content/images/';
$paths['public']['content']['images']['thumbnails'] = '/home/xxx/public_html/content/images/thumbnails/';
?>


Nu wil ik bijvoorbeeld het 'content' pad als volgt kunnen aanroepen:

$paths->content;

en het 'thumbnail' pad wil ik als volgt kunnen aanroepen:

$paths->content->images->thumbnails;

Is wat ik wil mogelijk? Of kan zoiets niet en moet ik het bijvoorbeeld zo oplossen:

$paths->content;
$paths->content_images_thumbnails;

Wie kan mij advies geven? Ik hoor het graag! (Mocht het zo zijn dat de opbouw van de array anders moet dan is dat geen enkel probleem.)
 
PHP hulp

PHP hulp

24/04/2024 08:39:17
 
Wouter J

Wouter J

31/01/2013 22:24:50
Quote Anchor link
php array to object eerste hit.
 
Ozzie PHP

Ozzie PHP

31/01/2013 22:32:33
Quote Anchor link
Wouter, zo ver was ik zelf ook wel, dus snap je reactie niet helemaal. Ik heb die optie destijds gebruikt, maar ik kon niet verder komen dan bijv. $path->content, maar $path->content->images->thumbnails werkte niet. Vandaar mijn vraag.
 
Wouter J

Wouter J

31/01/2013 22:37:03
Quote Anchor link
goed, dan gaan we maar quoten:

Quote:
Here's an example below that converts a multi-dimensional array to an object. This is accomplished through recursion.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
function arrayToObject($array) {
    if(!is_array($array)) {
        return $array;
    }

    
    $object = new stdClass();
    if (is_array($array) && count($array) > 0) {
      foreach ($array as $name=>$value) {
         $name = strtolower(trim($name));
         if (!empty($name)) {
            $object->$name = arrayToObject($value);
         }
      }

      return $object;
    }

    else {
      return FALSE;
    }
}

?>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$person
= array (
   'first' => array('name' => 'Richard')
);

 
$p = arrayToObject($person);
?>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
// Now you can use $p like this:
echo $p->first->name; // Will print 'Richard'
?>
 
Ozzie PHP

Ozzie PHP

31/01/2013 22:40:00
Quote Anchor link
Oké... tot zover begrijp ik het... maar stel nu dat ik nog een niveau verder wil...
Ik wil bijvoorbeeld dit:

echo $p->first->name->firstletter; // Will print 'R'

Kan dat ook? Daar zou ik graag een oplossing voor horen. Hoe moet ik dan die array instellen?
 
Wouter J

Wouter J

31/01/2013 22:43:28
Quote Anchor link
Ja, gewoon zoals je altijd doet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$person
= array(
    'first' => array(
        'name' => array(
            'firstletter' => 'R',
        ),
    ),
);


$p = arrayToObject($person);

echo $p->first->name->firstletter; // >> 'R'
 
Ozzie PHP

Ozzie PHP

31/01/2013 22:45:21
Quote Anchor link
Ja, da's leuk... maar hoe krijg ik nou die 'name' nog tevoorschijn? Snap je wat ik bedoel en wat dus ook mijn punt nou net is?

Ik wil dus dit kunnen doen:

echo $p->first->name->firstletter; // Will print 'R'

maar ook dit:

echo $p->first->name; // Will print 'Richard'
 
Wouter J

Wouter J

31/01/2013 22:57:16
Quote Anchor link
Ja, maar dan hebben we het toch helemaal niet meer over arrays. Dan moet je gewoon een class gaan maken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php

class NameBag
{
    private $name;

    public function __construct($name)
    {

        $this->name = $name;
    }


    public function getFirstLetter()
    {

        return $this->name[0];
    }


    public function __toString()
    {

        return $this->name;
    }


    public function __get($key)
    {

        if (method_exists($this, $key)) {
            return $this->$key();
        }
elseif (($getter = 'get'.ucfirst($key)) && method_exists($this, $getter)) {
        
            return $this->$getter();
        }
    }
}


$person = array(
    'first' => array(
        'name' => new NameBag('Richard'),
    ),
);


echo $person->first->name; // >> 'Richard'
echo $person->first->name->firstLetter; // >> 'R'
 
Ozzie PHP

Ozzie PHP

31/01/2013 23:01:49
Quote Anchor link
Hmmm, ja... maar ik wil dus geen classes daarvoor gaan maken. Dat slaat de plank mis.

Maar als ik je dus goed begrijp, kan wat ik wil niet met een array?
 
Wouter J

Wouter J

31/01/2013 23:04:11
Quote Anchor link
dat klopt
 
Ozzie PHP

Ozzie PHP

31/01/2013 23:21:41
Quote Anchor link
okeej... dan moet ik even kijken hoe ik dat moet oplossen. Thanks!
 
Rick van Riel

Rick van Riel

01/02/2013 09:08:29
Quote Anchor link
Ozzie misschien heb je hier iets aan

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$init
->foo = "Test data";
$init->bar = new stdClass;
$init->bar->baaz = "Testing";
$init->bar->fooz = new stdClass;
$init->bar->fooz->baz = "Testing again";
?>
 
Ozzie PHP

Ozzie PHP

01/02/2013 11:02:25
Quote Anchor link
Dankjewel Rick! Ik heb inmiddels een functie gevonden die dat wel automatisch kan, van een array een object maken dus ik kan voorlopig vooruit. Bedankt voor het meedenken!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.