PHP从数组元素构建字符串



我有以下数组:

$myarray = array( 
    2 => array( 
        'id' => '2', 
        'parent_id' => '1', 
    ),  
    4 => array( 
        'id' => '4', 
        'parent_id' => '2', 
    ), 
    3 => array( 
        'id' => '3', 
        'parent_id' => '1', 
    ), 
    1 => array( 
        'id' => '1', 
        'parent_id' => '0', 
    ) 
);

,目标是得到以下输出:

1 
1.2 
1.2.4  
1.3

问题是我需要在没有递归的情况下完成。这是一种答案但是这些人在构建树而我需要的是字符串。我试图使用某种$basestring变量来知道我在哪里,但如果没有递归,它仍然不起作用。有什么办法吗?

Thank you

UPD我的第一次尝试是:

foreach($myarray as $k=>$value){
 if($value['parent_id'] == 0){
    $string = '1';
    $id = $value['id'];
    $newarr[0] = $string;
    $basestring = $string.'.';
 }elseif($value['parent_id'] == 1){
    $string = $basestring.$value['id'];
    $id = $value['id'];
    $newarr[$id] = $string;
 }elseif($value['one'] == 2){
    $string = $basestring.$value['parent_id'].'.'.$value['id'];
    $id = $value['id'];
    $newarr[$id] = $string;
 }elseif($value['parent_id'] == 3){
    $string = $basestring.$value['parent_id'].'.'.$value['id'];
    $id = $value['id'];
    $newarr[$id] = $string;
 }elseif($value['parent_id'] == 4){
    $string = $basestring.$value['parent_id'].'.'.$value['id'];
    $id = $value['id'];
    $newarr[$id] = $string;
   }//etc...
  }
}

,但显然它失败了,因为不可伸缩性。我需要编写从child到parent的迭代这里

一个迭代的解决方案可以是这样的:

foreach ($myarray as $x) {
    $temp = $x;
    $string = [];
    while (true) {
        $string[] = $temp['id'];                            // add current level id
        if (!isset($myarray[$temp['parent_id']])) break;    // break if no more parents
        $temp = $myarray[$temp['parent_id']];               // replace temp with parent
    }
    $strings[] = implode('.', array_reverse($string));
    // array_reverse is needed because you've added the levels from bottom to top
}

基本上对于数组的每个元素,创建一个临时副本,然后通过键找到它的父元素,并将临时副本设置为父元素,直到没有找到更多的父元素。将id添加到数组中,并在到达末尾时从数组中构建字符串。

这假设你的数组是有效的,因为它不包含循环引用(例如一个级别是它自己的祖先)。如果发生这种情况,为了防止无限循环,您可以在while循环中增加变量,并在达到合理的限制时中断。

相关内容

  • 没有找到相关文章

最新更新