Индексирование во вложенные массивы VS с использованием ссылки на самый глубокий уровень? - PullRequest
0 голосов
/ 15 декабря 2011

Для глубоко вложенного массива: $array = array('nested' => array('so' => array('deep' => array())));

... что быстрее / «лучше»?

$array['nested']['so']['deep'][0] = 'a';
$array['nested']['so']['deep'][1] = 'b';
$array['nested']['so']['deep'][2] = 'c';

или

$deep = &$array['nested']['so']['deep'];
$deep[0] = 'a';
$deep[1] = 'b';
$deep[2] = 'c';

Или они одинаковые? Если да, то предпочтительнее ли и почему?

Ответы [ 2 ]

3 голосов
/ 15 декабря 2011

Ведение ссылки быстрее и проще в управлении , как правило.Однако это может не иметь значения, если вы не обращаетесь к нему несколько раз.Хеширование быстро.В тестах, которые я недавно проводил, я обнаружил, что хеширование происходит даже быстрее, чем я предполагал ранее.Чем больше уровней вы обходите по ссылке, тем больше улучшений вы увидите.

Тем не менее, самое важное для меня - легче поддерживать .Увеличение производительности, вероятно, будет незначительным в большинстве случаев.Я бы не стал делать это для производительности, но если это сделает ваш код более читабельным, тогда я полностью за это.

2 голосов
/ 15 декабря 2011

Возможно, вы пропустили другой вариант:

$deep[0] = 'a';
$deep[1] = 'b';
$deep[2] = 'c';
$array['nested']['so']['deep'] = $deep;

Быстрее и лучше во многом зависит, эти термины довольно широки. Быстрее печатать? Вы сами решаете. Быстрее выполнить? Я не думаю, что стоит знать в таком общем виде, это может иметь значение в конкретных местах, но тогда вам нужно также метриковать это в бетоне, чтобы узнать.

...