为了能够搜索和索引/排序数组
我正在尝试解析一个大型多维数组。现在,我只是使用CakePHP shell这样做,但任何方法都足够了。我需要做的是获取父/子/更多子项的数组,并创建一个带有相关“轮廓号”的id数组
例如:
1
1.1
1.2
1.2.1
1.2.2
1.2.3
等等。
以下是我的“输入数组”的示例:
Array
(
[0] => Array
(
[AsapStructure] => Array
(
[id] => 1
[lft] => 30267
[rght] => 32774
[parent_id] =>
[wbs] =>
)
[children] => Array
(
[0] => Array
(
[AsapStructure] => Array
(
[id] => 2
[lft] => 30268
[rght] => 30773
[parent_id] => 1
[wbs] => 1
)
[children] => Array
(
[0] => Array
(
[AsapStructure] => Array
(
[id] => 3
[lft] => 30269
[rght] => 30382
[parent_id] => 2
[wbs] => 1.1
)
我设想的是拥有一个自我递归的简单解析机制。我开发的一个例子如下:
<?php
var $structIndex = array();
private function __parseStruct( $toParse,$prefix = null ) {
$iterator = 0;
if ( $prefix )
$prefix = $prefix . '.';
foreach( $toParse as $datum ) {
$iterator++;
if ( $datum['AsapStructure']['id'] == 1 )
$this->structIndex[ 1 ] = NULL;
else
$this->structIndex[ $datum['AsapStructure']['id'] ] = $prefix . $iterator ;
$subiterator = 0;
foreach( $datum['children'] as $key => $data ) {
$subiterator++;
$this->structIndex[ $data['AsapStructure']['id'] ] = $prefix . $subiterator;
if ( ! empty( $datum['children'] ) ) {
$this->__parseStruct( $datum['children'], $subiterator );
}
}
}
return $this->structIndex;
}
?>
我做的是,我调用此$this->__parseStruct( $data )
函数并将数组传递给它。然后该函数遍历数组,调用嵌套子数组的函数。我有一部分工作正常,我似乎无法使逻辑正确创建'索引',即1.1,1.2,1.2.1等等。
那么我的目标输出就是:
$array[ $rowid ] = [ 1.1 / 1.2 / 1.2.1 / 1.2.2 ] or any combination as such.
非常感谢任何帮助。
答案 0 :(得分:0)
我走在正确的轨道上,我只是添加了一个额外的不必要的步骤。
private function __parseStruct( $toParse,$prefix = null ) {
$iterator = 0;
if ( $prefix )
$prefix = $prefix . '.';
foreach( $toParse as $datum ) {
$iterator++;
if ( $datum['AsapStructure']['id'] == 1 )
$this->structIndex[ 1 ] = NULL;
else
$this->structIndex[ $datum['AsapStructure']['id'] ] = $prefix . $iterator ;
if ( ! empty( $datum['children'] ) ) {
$this->__parseStruct( $datum['children'], $prefix.$iterator );
}
}
return $this->structIndex;
}
这解决了这个问题。但是,由于我的数组的性质,我有必要通过执行以下操作来调用该函数:$this->__parseStruct( $data[0]['children'] );
否则我最后得到1.为结果数组中的每个数据元素添加前缀。