2017-07-27 215 views
0

例如,我有对象:如何从嵌套对象构建嵌套数组?

<?php 

class A 
{ 
    public $key; 
    public $parent; 
} 

class B 
{ 
    public $value; 
    public $objects; 
} 

$a1 = new A(); 
$a1->key = 'a1'; 
$a2 = new A(); 
$a2->key = 'a2'; 
$a2->parent = $a1; 
$a3 = new A(); 
$a3->key = 'a3'; 
$a3->parent = $a2; 

$b = new B(); 
$b->objects = [$a1, $a2, $a3]; 
$b->value = 100; 
someFunction($b); 

在结果,我需要得到数组是这样的:

[ 
'a1' => ['a2' => ['a3' => 100]] 
] 

我怎样才能建立这个数组?当然,3对象只是一个例子,这个值可能会更大或更小,所以我想我需要递归函数。

+0

你想建立自己的对象,然后用(数组)$对象转换呢? – mkaatman

+0

期望的效果未被充分定义。你是因为父母关系还是因为价值变量而得出你的结果?因为其中之一是多余的。你也应该至少试着想出一个你的函数的原型,并在这里发布。 – Kempeth

回答

1

另一种解决方案,但没有全局变量:

function nested($ob, $val, $res){ 
    if($res == array()) { 
    $res = $val; 
    } 
    $res = array($ob->key => $res); 
    if(is_object($ob->parent)){ 
    $res = nested($ob->parent, $val, $res); 
    } 
    return($res); 
} 

$res = nested($b->objects[count($b->objects) - 1], $b->value, array()); 

echo("<pre>"); 
print_r($b); 
print_r($res); 
0

从对象结构转换

{ 
    'objects':[ 
    { 
     'key':'a1' 
    }, 
    { 
     'key':'a2', 
     'parent':{ 
     'key':'a1' 
     }, 
    }, 
    { 
     'key':'a3', 
     'parent':{ 
     'key':'a2', 
     'parent':{ 
      'key':'a1' 
     } 
     } 
    } 
    ], 
    'value':100 
} 

到:

[ 
'a1' => ['a2' => ['a3' => 100]] 
] 

是不平凡的。你必须自己创建一些功能。

+0

是的,我正在请求帮助建立这个功能=) – engilexial

+0

我认为我会这样做:在最后一个元素,递归替换,例如,'父'与值'key'。但是还有其他的选择吗? – engilexial

0

这是一个非常有趣的任务来解决!感谢发布。它仍然不是完美的代码,因为函数中有一个全局变量,但它可以工作。我希望它很简单。我甚至用四个物体测试过它。

$res = array(); 

function nested($ob, $val){ 
    global $res; 

    if($res == array()) { 
    $res = $val; // Set the deepest value in the array to $val 
    } 
    // Form: put a new array around the old 
    $res = array($ob->key => $res); 
    if(is_object($ob->parent)){ 
    nested($ob->parent, $val); // parent -> go deeper 
    } 
} 

nested($b->objects[count($b->objects) - 1], $b->value); 

echo("<pre>"); 
print_r($b); 
print_r($res); 

我希望帮助:)