Hi, Well, you will have an infinite recursion there if the mapping has cycles, something like A->B, B->C, C->A would generate an invite recursion. Checking if the mapping has cycles is pretty simple: you have to create a directed graph and then go through the graph in DFS marking each visited node, if you have to mark a node already marked then you have a cycle. Tarjan's algorithm does that and a little more, see here: http://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm Hope that helps. Jonathan On Thu, Jul 30, 2009 at 8:38 PM, Matt Neimeyer<matt@xxxxxxxxxxxx> wrote: > I'm cleaning up some inherited code in our data import module. For a > variety of reasons we have to support old standards of the import > format. Since some of those old versions were created we have since > renamed some fields in our data structure. So right now I've a hard > map for some field names... > > function GetMappedField($Field) > { > $FieldMap["A"] = "B"; > $FieldMap["C"] = "D"; > > return isset($FieldMap[$Field])?$FieldMap[$Field]:$Field); > } > > But I've just spent a while tracking down a bug where someone mapped A > to B and then someone else mapped B to C. > > I'm thinking of changing the return to... > > return isset($FieldMap[$Field])?GetMappedField($FieldMap[$Field]):$Field); > > ...but I'm worried about the recursion. (Which isn't a strength of mine) > > I don't THINK I need to worry about circular mappings... but I'm not > sure how to check for it if I did... > > Any suggestions? Thanks! > > Matt > > -- > PHP General Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > > -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php