array(
'a'=>array(
'x1'=>1,
'x2'=>1,
'x3'=>array(
'y1'=>1,
'y2'=>1,
'y3'=>1
),
'x4'=>1
),
'b'=>array(
'f1'=>1,
'f2'=>array(
't1'=>1,
't2'=>1,
't3'=>1
),
'f3'=>1,
'f4'=>1
)
)如何将以上的数组拼接成
a,a-x1,a-x2,a-x3,a-x3-y1,a-x3-y2,a-x3-y3,a-x4,b,b-f1,b-f2,b-f2-t1,b-f2-t2,b-f2-t3,b-f3,b-f4

解决方案 »

  1.   

    $ar = array(
        'a'=>array(
            'x1'=>1,
            'x2'=>1,
            'x3'=>array(
                'y1'=>1,
                'y2'=>1,
                'y3'=>1
            ),
            'x4'=>1
        ),
        'b'=>array(
            'f1'=>1,
            'f2'=>array(
                't1'=>1,
                't2'=>1,
                't3'=>1
            ),
            'f3'=>1,
            'f4'=>1
        )
    );
    $arResult = array();
    foreach($ar as $k1=> $v1) {
       $arResult[] = $k1;
       foreach($v1 as $k2=>$v2) {
          if (!is_array($v2)) $arResult[] = "{$k1}-{$k2}";
          else {
             foreach($v2 as $k3=>$v3) $arResult[] = "{$k1}-{$k2}-{$k3}";
          }
       }
    }
    echo implode(',',$arResult);
      

  2.   

    这个数组层级是未知的,可能是6级的
    如:
    $ar = array(
        'a'=>array(
            'x1'=>1,
            'x2'=>1,
            'x3'=>array(
                'y1'=>1,
                'y2'=>1,
                'y3'=>array(
                    'l1'=>1,
                    'l2'=>1
                )
            ),
            'x4'=>1
        ),
        'b'=>array(
            'f1'=>1,
            'f2'=>array(
                't1'=>1,
                't2'=>1,
                't3'=>1
            ),
            'f3'=>1,
            'f4'=>1
        )
    );
      

  3.   

    有点问题,修改一下:
    $arResult = array();
    foreach($ar as $k1=> $v1) {
       $arResult[] = $k1;
       foreach($v1 as $k2=>$v2) {
          $arResult[] = "{$k1}-{$k2}";
          if (is_array($v2)) foreach($v2 as $k3=>$v3) $arResult[] = "{$k1}-{$k2}-{$k3}";
       }
    }
    echo implode(',',$arResult);
    //output
    //a,a-x1,a-x2,a-x3,a-x3-y1,a-x3-y2,a-x3-y3,a-x4,b,b-f1,b-f2,b-f2-t1,b-f2-t2,b-f2-t3,b-f3,b-f4
      

  4.   

    这个数组层级是未知的,可能是6级的
    如:array(
        'a'=>array(
            'x1'=>1,
            'x2'=>1,
            'x3'=>array(
                'y1'=>1,
                'y2'=>1,
                'y3'=>array(
                   'l1'=>1,
                   'l2'=>1,
                   'l3'=>1
                )

            ),
            'x4'=>1
        ),
        'b'=>array(
            'f1'=>1,
            'f2'=>array(
                't1'=>1,
                't2'=>1,
                't3'=>1
            ),
            'f3'=>1,
            'f4'=>1
        )
    );
      

  5.   

    参考。
    $tree = array(
        'a'=>array(
            'x1'=>1,
            'x2'=>1,
            'x3'=>array(
                'y1'=>1,
                'y2'=>1,
                'y3'=>1
            ),
            'x4'=>1
        ),
        'b'=>array(
            'f1'=>1,
            'f2'=>array(
                't1'=>1,
                't2'=>1,
                't3'=>1
            ),
            'f3'=>1,
            'f4'=>1
        )
    );function combine_keys( $arr,$root )
    {
        static $t = array();
        foreach( $arr as $k=>$v)
        {
            $t[] = !empty($root) ? ($root."-".$k) : $k;
            if( is_array($v))
            {
                keys($v,end($t));
            }
        }
        return $t;
    }echo "<pre/>";
    print_r(combine_keys( $tree ));
      

  6.   

    函数递归。上面贴错了
    function combine_keys( $arr,$root )
    {
        static $t = array();
        foreach( $arr as $k=>$v)
        {
            $t[] = !empty($root) ? ($root."-".$k) : $k;
            if( is_array($v))
            {
                combine_keys($v,end($t));
            }
        }
        return $t;
    }
      

  7.   

    $ar = array(
        'a'=>array(
            'x1'=>1,
            'x2'=>1,
            'x3'=>array(
                'y1'=>1,
                'y2'=>1,
                'y3'=>1
            ),
            'x4'=>1
        ),
        'b'=>array(
            'f1'=>1,
            'f2'=>array(
                't1'=>1,
                't2'=>1,
                't3'=>1
            ),
            'f3'=>1,
            'f4'=>1
        )
    );$t = foo($ar);
    echo join(',', $t);function foo($ar, $t=array()) {
      $r = array();
      foreach($ar as $k=>$v) {
        $p = array_merge($t, array($k));
        $r[] = join('-', $p);
        if(is_array($v)) $r = array_merge($r, foo($v, $p));
      }
      return $r;
    }a,a-x1,a-x2,a-x3,a-x3-y1,a-x3-y2,a-x3-y3,a-x4,b,b-f1,b-f2,b-f2-t1,b-f2-t2,b-f2-t3,b-f3,b-f4
      

  8.   


    <?php
    $arr = array(
        'a'=>array(
            'x1'=>1,
            'x2'=>1,
            'x3'=>array(
                'y1'=>1,
                'y2'=>1,
                'y3'=>1
            ),
            'x4'=>1
        ),
        'b'=>array(
            'f1'=>1,
            'f2'=>array(
                't1'=>1,
                't2'=>1,
                't3'=>1
            ),
            'f3'=>1,
            'f4'=>1
        )
    ) ;function getArrayString($arr, $key) {
    global $a;
    foreach($arr as $k => $v) {
    if ($key != null) {
    $a[] = "{$key}-{$k}";
    } else {
    $a[] = $k;
    }
    if (is_array($v)) {
    getArrayString($v, $k);
    }
    }
    }
    $a = array();
    getArrayString($arr, null);
    var_dump(implode(',', $a));
      

  9.   


    $ar = array(
        'a'=>array(
            'x1'=>1,
            'x2'=>1,
            'x3'=>array(
                'y1'=>1,
                'y2'=>1,
                'y3'=>1
            ),
            'x4'=>1
        ),
        'b'=>array(
            'f1'=>1,
            'f2'=>array(
                't1'=>1,
                't2'=>1,
                't3'=>1
            ),
            'f3'=>1,
            'f4'=>1
        )
    );function output($pre_str,$ar){
    $split = '';
    foreach($ar as $k=>$v){
    $pre_str && $split = '-';
        $strings[] = $pre_str.$split.$k;
        if (is_array($v))  $strings = array_merge($strings,output($pre_str.$split.$k,$v));
    }
        return  $strings;
    }$strings = output('',$ar);
    echo implode(',',$strings);