我想写这样一个函数,他的参数是某一个数组($arr1)的键值(无限深度),函数的任务是:1.根据参数获取 $arr1 中的值2.再把 $arr1 的值加在 $arr2 后,各键保持一致请问无何写,比较合理呢?

解决方案 »

  1.   

    请楼主举个实例,这样大家很好理解 。
    例如:
    $arr1 = xxx
    $arr2 = yyy
    拼接后得到 $arr3 = zzz看见无限深度,那明摆着让人用递归了。
      

  2.   

    不好意思...我的问题!这个确实不好表达,那我把自己写了一半的代码给大家看下,大家就明白了...
    $arr1 = array(
    'key1' => array(
    'key11' => array(
    'key111' => 'val111')),
    'key2' => array(
    'key21' => 'val21'));

    /**
     *  把 arr1 的值移到 arr2,且键位一样
     */
    function example()
    {
    global $arr1;
    $arr2 = array();
    $tmp = $arr1; // 临时变量

    // 获取参数,即 $arr1 数组的 key
    $args = func_get_args();

    // 根据参数获取 $arr1 的值
    foreach ($args as $arg)
    {
    $tmp = $tmp[$arg];
    }

    // 把 $tmp 放到 $arr2 里,并且键和 $arr1 一样
    // 不知道怎么写...
    }
      

  3.   

    也可以$arr2 = &$arr1;
    看你需求了
      

  4.   

    不对,这样把 $arr1 所有值都赋值给了 $arr2,我再举个例子:example(key1,key11),把 $arr1['key1']['key2']赋值$arr2['key1']['key2']example(key1),把 $arr1['key1']赋给$arr2['key1']
      

  5.   

    $arr2['key1']['key2'] = $arr1['key1']['key2'];
    $arr2['key1'] = $arr1['key1'];lz你到底是啥需求啊  
    你想遍历一棵树吗?
      

  6.   

    PIGer920 你没理解,因为函数参数是不固定的,你这么写是不行的.
    example(key1,key11),把 $arr1['key1']['key2']赋值$arr2['key1']['key2']example(key1), 把 $arr1['key1']赋给$arr2['key1']我的需求就要 example 这么一个函数!
      

  7.   

    example()函数的参数是不定长,功能和直接赋值没区别,不过我需要这么一个函数...大家都看不懂吗?我表达有这么差吗.........
      

  8.   

    说到底不就2个数组合并嘛?
    $a=$a+$b;或array_merge
    这两种方法有区别,你看看那个对的.
    再看看array_merge_recursive 对不对.老实我也没懂你的意思,你自己去看下.
      

  9.   

    你example里面的参数是你自己给定的,你既然可以给定这个参数,为什么不直接赋值?难道你想遍历一遍数组,等数组的key与你给定的参数相等的时候再赋值吗?
      

  10.   

    不是 array_merge(),这函数我知道的....请大家好好看看我提供的线索,想想,应该能明白的,我觉得挺清楚的
      

  11.   


    <?php
        $a=$b=array();
        $a[k1][k11]='a';
        $a[k2][k22]='aa';
        function fz(){
            global $a,$b;
            $args=func_get_args();
            $at=$a;
            $bt=&$b;
            foreach($args as $arg){
               $bt[$arg]=array();
               $bt=&$bt[$arg];
               $at=$at[$arg];
            }
            $bt=$at;
        }
        
        fz('k1','k11');
        print_r($b);
        fz('k2');
        print_r($b);
    ?>
      功能不一定完整,但是应该是对的.
      

  12.   


    <?php  
      
    $arr1 = array(
        'key1' => array(
            'key11' => array(
                'key111' => 'val111')),
        'key2' => array(
            'key21' => 'val21'));
            
    /**
     *  把 arr1 的值移到 arr2,且键位一样
     */
    function example($key)
    {
        global $arr1;
        $arr2 = array();
        $tmp = $arr1; // 临时变量
        
        // 获取参数,即 $arr1 数组的 key
        //$args = func_get_args();
        
        // 根据参数获取 $arr1 的值
        foreach ($key as $arg)
        {
            $arr2[$arg] = $tmp[$arg];
        }
        
        // 把 $tmp 放到 $arr2 里,并且键和 $arr1 一样
        // 不知道怎么写...
    }
    $key=array('key2','key1');//example()函数的参数是不定长
    example($key) ;
      
    ?>