douguan8940 2015-02-28 12:17
浏览 52
已采纳

多级数组赋值

Here is the example PHP array representation

array(
 "test1" => array(
             "test1subtest1" => array(..)
            ),
 "test2" => array(
             "test2subtest1" => array(..)
            )
 )

So, here is the question: is there any tool in PHP which can be used to assign values to multidimensional array with random depth and index names? It suppose to look like this:

$valuetoassing = "TESTVALUE";
$testarray     = array();
array_assign_multidimensional($testarray, $valuetoassing, array("test1", "test1subtest1", "test1subtest1subtest1"));

Problem is that I do not know what depth the array will have, so I can not code it. Index names are also generated at the run time.

EDIT: I figured that my particular case can be solved using some kind of linked list (stored as array with items that contain actual data and pointer to the index of the next element), but I'm sure I'll meet this problem again in the future so I will not close the question right now.

  • 写回答

1条回答 默认 最新

  • dongxiongshi9952 2015-02-28 12:50
    关注

    This is pretty easy to do using references.

    function array_assign_multidimensional(&$input_array, $value, $list){
            $assignee = &$input_array;
            foreach($list as $key){
                    $assignee = &$assignee[$key];
            }
            $assignee = $value;
    }
    
    
    $input = array(
            'firstLayer' => array(
                    'secondLayer' => array(
                            'test' => 'old'
                    )
            ),
            'randomOutlyingValue' => ''
    );
    
    array_assign_multidimensional($input, 'new', array('firstLayer', 'secondLayer', 'test'));
    
    var_dump($input);
    
    /*
    array(2) {
      ["firstLayer"]=>
      array(1) {
        ["secondLayer"]=>
        array(1) {
          ["test"]=>
          string(3) "new"
        }
      }
      ["randomOutlyingValue"]=>
      string(0) ""
    }
    */
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?