PHP - Convert multidimensional array to 2D array with dot notation keys

前端 未结 5 725
广开言路
广开言路 2020-11-27 15:22

There are plenty of tips and code examples out there of accessing PHP arrays with dot notation, but I would like to do somewhat the opposite. I would like to take a multidim

5条回答
  •  南方客
    南方客 (楼主)
    2020-11-27 16:04

    This another approach similar to Blafrat above - but handles simply arrays as values.

     function dot_flatten($input_arr, $return_arr = array(), $prev_key = '')
     {
         foreach ($input_arr as $key => $value)
         {
            $new_key = $prev_key . $key;
    
            // check if it's associative array 99% good
            if (is_array($value) && key($value) !==0 && key($value) !==null)
            {
                $return_arr = array_merge($return_arr, dot_flatten($value, $return_arr, $new_key . '.'));
            }
            else
            {
                $return_arr[$new_key] = $value;
            }
        }
    
        return $return_arr;
    }
    

    (The only case this wouldn't catch is where you had a value that was associative but the first key was 0.)

    Note that the RecursiveIteratorIterator can be slower than regular recursive function. https://xenforo.com/community/threads/php-spl-why-is-recursiveiteratoriterator-100x-slower-than-recursive-search.57572/

    In this case using the sample array given for 1000 iterations php5.6, this code is twice as fast (recursive=.032 vs interator=.062) - but the difference is probably insignificant for most cases. Mainly I prefer recursive because I find the logic of the Iterator needlessly complicated for a simple use case like this.

提交回复
热议问题