array to object
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:
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.)
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)
1
2
3
4
5
6
7
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/';
?>
$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 array to object eerste hit.
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.
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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;
}
}
?>
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)
Code (php)
1
2
3
4
2
3
4
<?php
// Now you can use $p like this:
echo $p->first->name; // Will print 'Richard'
?>
// Now you can use $p like this:
echo $p->first->name; // Will print 'Richard'
?>
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?
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?
Ja, gewoon zoals je altijd doet:
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'
Ik wil dus dit kunnen doen:
echo $p->first->name->firstletter; // Will print 'R'
maar ook dit:
echo $p->first->name; // Will print 'Richard'
Ja, maar dan hebben we het toch helemaal niet meer over arrays. Dan moet je gewoon een class gaan maken:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
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'
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'
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?
Maar als ik je dus goed begrijp, kan wat ik wil niet met een array?
dat klopt
okeej... dan moet ik even kijken hoe ik dat moet oplossen. Thanks!
Ozzie misschien heb je hier iets aan
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!




