PHP初级算法系列 - 1

给定一个数组:

1
$arr = array('b' => 'a', 'c' => 'a', 'e' => 'b', 'd' => 'b', 'f' => 'c', 'g' => 'e', 'h' => 'f');

给出可以完成以下格式转换的算法。

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
Array
(
[a] => Array
(
[b] => Array
(
[e] => Array
(
[0] => g
)

[0] => d
)

[c] => Array
(
[f] => Array
(
[0] => h
)

)

)

)

算法实现:

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
class BDphp1
{
private function php1($tmp_array, $start)
{
$result = array();
if ($ret = array_keys($tmp_array, $start)) {
foreach ($ret as $v) {
if ($rev = $this->php1($tmp_array, $v)) {
$result[$v] = $rev;
} else {
$result[] = $v;
}
}
}
return $result;
}

public function bd_php1($tmp_array, $start = '')
{
$tmp = array();
if ($start == null) {
$start = array_shift(array_values($tmp_array));
}
$ret = $this->php1($tmp_array, $start);
$tmp[$start] = $ret;
return $tmp;
}

}

算法说明:主要使用 array_shift(),array_values(),array_keys() 函数和递归思想。