[nycphp-talk] Flattening a Tree
Elijah Insua
tmpvar at gmail.com
Wed Feb 25 03:27:10 EST 2009
This task is made much easier with qa class btw
On Feb 25, 2009, at 12:13 AM, csnyder <chsnyder at gmail.com> wrote:
> On Tue, Feb 24, 2009 at 3:52 PM, charlie derr <cderr at simons-
> rock.edu> wrote:
>> Ajai Khattri wrote:
>>>
>>> On Tue, 24 Feb 2009, csnyder wrote:
>>>
>>>> What are you fishing for? Write some code and try it.
>>>
>>>
>>> Nice.
>>
>>
>> I initially had a similar reaction when I saw this comment, but
>> when I
>> really thought about it, that's the power of PHP (that it's so
>> easy to just
>> try stuff).
>
> Well, no, he's right. I was just being mean because I underestimated
> how mind-bending the problem is.
>
> You have to pass your new array by reference, but you also have to
> pass the current key you're working on so that it can be prepended to
> new keys as you traverse them.
>
> My code is similar to Dan's:
>
> <?php
>
> function flatten( $array, &$flatarray, $currentkey ) {
> foreach( $array AS $key=>$val ) {
> $nextkey = $currentkey.'_'.$key;
> if ( is_array( $val ) ) {
> flatten( $val, $flatarray, $nextkey );
> }
> else {
> $flatarray[ $nextkey ] = $val;
> }
> }
> }
>
> $array = array( 'a'=>array('b'=>'bee', 'c'=>'cee' ), 'b'=>array(
> 'd'=>'dee', 'e'=>'eee', 'f'=>array('g'=>'gee', 'h'=>'hee' ) ) );
> $flat = array();
>
> foreach ( $array AS $key=>$val ) {
> if ( is_array( $val )) {
> flatten( $val, $flat, $key );
> }
> else {
> $flat[ $key ] = $val;
> }
> }
>
> That took all of ten minutes to write and test, but there was
> definitely an "oh shi... " moment figuring out how to get the keys
> right.
> _______________________________________________
> New York PHP User Group Community Talk Mailing List
> http://lists.nyphp.org/mailman/listinfo/talk
>
> http://www.nyphp.org/show_participation.php
More information about the talk
mailing list