TABLE `people` +----+------------+-------+ | sn | name | upper | +----+------------+-------+ | 1 | Clement | 0 | | 2 | Jean | 1 | | 3 | Annie | 1 | | 4 | Yuan | 2 | | 5 | Mei | 2 | | 6 | Blue | 3 | | 7 | Yang | 5 | | 8 | Lorinda | 0 | +----+------------+-------+
The structure is like:
结构如下:
Clement Jean Yuan Mei Yang Annie Blue Lorinda
The column upper
states the upper person of himself/herself.
列的上部表示他/她自己的上层人物。
The problem is: How can I get a nested/multi-dimensional array from MySQL? I thought I could use loops to fetch, but I failed to automated fetch all the lowers. The array could be like this:
问题是:如何从MySQL获得嵌套/多维数组?我以为我可以使用循环来获取,但我无法自动获取所有降低。数组可能是这样的:
Array ( [1]=>Array ( [self]=>Clement [2]=>Array ( [self]=>Jean [4]=>Array ( [self]=>Yuan ) [5]=>Array ( [self]=>Mei [7]=>Array ( [self]=>Yang ) ) ) [3]=>Array ( [self]=>Annie [6]=>Array ( [self]=>Blue ) ) ) [8]=>Array ( [self]=>Lorinda ) )
Since we don't know how many 'upper' persons does one have, the solution should be an automated function that build a complete array, not just for three or four dimension. In other word, the function should deep into all the lower person from a top person.
由于我们不知道有多少“上层人”,因此解决方案应该是一个自动化功能,可以构建一个完整的阵列,而不仅仅是三维或四维。换句话说,该功能应该深入到*人物的所有下层人员身上。
2 个解决方案
#1
1
Given your input as:
鉴于您的输入为:
$input = array(
array('sn' => 1, 'name' => 'Clement', 'upper' => 0),
array('sn' => 2, 'name' => 'Jean', 'upper' => 1),
array('sn' => 3, 'name' => 'Annie', 'upper' => 1),
array('sn' => 4, 'name' => 'Yuan', 'upper' => 2),
array('sn' => 5, 'name' => 'Mei', 'upper' => 2),
array('sn' => 6, 'name' => 'Blue', 'upper' => 3),
array('sn' => 7, 'name' => 'Yang', 'upper' => 5),
array('sn' => 8, 'name' => 'Lorinda', 'upper' => 0),
);
using references you can build a tree with the following loop:
使用引用,您可以使用以下循环构建树:
$map = array();
foreach ($input as $node) {
// init self
if (!array_key_exists($node['sn'], $map)) {
$map[$node['sn']] = array('self' => $node['name']);
}
else {
$map[$node['sn']]['self'] = $node['name'];
}
// init parent
if (!array_key_exists($node['upper'], $map)) {
$map[$node['upper']] = array();
}
// add to parent
$map[$node['upper']][$node['sn']] = & $map[$node['sn']];
}
print_r($map[0]);
demo: http://3v4l.org/vuVPu
演示:http://3v4l.org/vuVPu
#2
0
Assuming the data is like this
假设数据是这样的
$data = array(
array(1, 'Clement', 0),
array(2, 'Jean ', 1),
array(3, 'Annie ', 1),
array(4, 'Yuan ', 2),
array(5, 'Mei ', 2),
array(6, 'Blue ', 3),
array(7, 'Yang ', 5),
array(8, 'Lorinda', 0),
);
this recursive function might work:
这个递归函数可能有效:
function tree($data, $node) {
foreach($data as $e)
if($e[2] == $node[0])
$node['children'] []= tree($data, $e);
return $node;
}
Use it like this:
像这样用它:
$tree = tree($data, array(0));
print_r($tree);
#1
1
Given your input as:
鉴于您的输入为:
$input = array(
array('sn' => 1, 'name' => 'Clement', 'upper' => 0),
array('sn' => 2, 'name' => 'Jean', 'upper' => 1),
array('sn' => 3, 'name' => 'Annie', 'upper' => 1),
array('sn' => 4, 'name' => 'Yuan', 'upper' => 2),
array('sn' => 5, 'name' => 'Mei', 'upper' => 2),
array('sn' => 6, 'name' => 'Blue', 'upper' => 3),
array('sn' => 7, 'name' => 'Yang', 'upper' => 5),
array('sn' => 8, 'name' => 'Lorinda', 'upper' => 0),
);
using references you can build a tree with the following loop:
使用引用,您可以使用以下循环构建树:
$map = array();
foreach ($input as $node) {
// init self
if (!array_key_exists($node['sn'], $map)) {
$map[$node['sn']] = array('self' => $node['name']);
}
else {
$map[$node['sn']]['self'] = $node['name'];
}
// init parent
if (!array_key_exists($node['upper'], $map)) {
$map[$node['upper']] = array();
}
// add to parent
$map[$node['upper']][$node['sn']] = & $map[$node['sn']];
}
print_r($map[0]);
demo: http://3v4l.org/vuVPu
演示:http://3v4l.org/vuVPu
#2
0
Assuming the data is like this
假设数据是这样的
$data = array(
array(1, 'Clement', 0),
array(2, 'Jean ', 1),
array(3, 'Annie ', 1),
array(4, 'Yuan ', 2),
array(5, 'Mei ', 2),
array(6, 'Blue ', 3),
array(7, 'Yang ', 5),
array(8, 'Lorinda', 0),
);
this recursive function might work:
这个递归函数可能有效:
function tree($data, $node) {
foreach($data as $e)
if($e[2] == $node[0])
$node['children'] []= tree($data, $e);
return $node;
}
Use it like this:
像这样用它:
$tree = tree($data, array(0));
print_r($tree);