On Wed, 2009-01-28 at 10:38 +1100, Clancy wrote: > PHP arrays permit extremely concise programming; for example if I have all my contacts in > an array $contacts, I can write: > > $my_phone_no = $contacts['clancy']['phone']; > > However it is clear that there must be a lot going on behind the scenes to achieve this > simple result, as it requires some sort of search procedure. > > Is it possible to give any indication of the overheads and memory costs that are involved > in such a statement, and of how well the search procedure is implemented? > > Also what the relative virtues of defining the same set of fields for every contact, as > against either defining only the fields which actually hold values, as in the following > examples? > > a: > $contacts['clancy']['home_address'] = 'jkjkjk'; > $contacts['clancy']['home_phone'] = 0123 4567; > $contacts['clancy'][' office_address''] = ''; > $contacts['clancy']['office_phone'] = ''; > $contacts['joe']['home_address'] = ''; > $contacts['joe']['home_phone'] = ''; > $contacts['joe']['office_address'] = 'jsfvkl'; > $contacts['joe']['office_phone'] = 'jsfvkl'; > > b; > $contacts['clancy']['home_phone'] = 0123 4567; > $contacts['clancy']['home_address'] = 'jkjkjk'; > $contacts['joe']['office_address'] = 'jsfvkl'; > $contacts['joe']['office_phone'] = 'jsfvkl'; > > And is there any advantage in always assigning the keys in the same order? Lookup is O( lg n ). Since your examples above are nested 2 levels deep then it's actually 2 * O( lg n ) which is O( lg n ). But really, the variable itself, $contacts is probably also looked up and it is also O( lg n ) and of course 3 * O( lg n ) is still O( lg n ). Moving along... for arbitrary depth paths, you'd be talking O( m lg n ) but for realistic cases you'll not get deep enough for that to matter much. Either way, if you are looping over an array and always accessing X levels deep, you might want to create a temporary variable that is level X - 1 (unless that's not a possible option). Cheers, Rob. -- http://www.interjinn.com Application and Templating Framework for PHP -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php