Микрооптимизация ключей против in_array () в PHP - PullRequest
0 голосов
/ 07 апреля 2011

Таким образом, у вас есть возможность структурировать массив так, как вам нужно, зная, что на несколько строк ниже в вашем коде вам нужно будет проверить наличие значения в этом массиве.На мой взгляд, у вас есть по крайней мере два варианта:

$values_array = array(
    'my_val',
    'my_val2',
    'and_so_on',
);

if(in_array('my_val', $values_array)) {
    var_dump('Its there!');
}

Или вы можете использовать ассоциативный массив и ключи для хранения вашего значения:

$values_array = array(
    'my_val'    => '',
    'my_val2'   => '',
    'and_so_on' => '',
);

if(isset($values_array['my_val'])) {
    var_dump('Its there!');
}

Какой метод вы бы использовали?выбрать и почему?Будете ли вы только стремиться сократить время обработки или минимизировать объем используемой памяти?

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

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

Ответы [ 3 ]

5 голосов
/ 07 апреля 2011

В самом деле? Используйте вариант, который лучше соответствует вашим потребностям. Особенно с таким меньшим количеством элементов, это далеко за рамки измерения.

Но есть реальная семантическая разница между ними. Первый определяет список, второй определяет карту. Если $array должен представлять список, используйте первый, если он должен представлять карту, используйте второй (очевидно, да?)).

Вообще: пусть никогда такие подходы микрооптимизации влияют на дизайн вашего приложения.

3 голосов
/ 07 апреля 2011

Удобочитаемость кода и удобство сопровождения всегда важнее оптимизации.

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

Если вы пишете что-то, где скорость выполнения действительно имеет значение, чтобы заботиться о такого рода вещах, то PHP (или вообще любой интерпретируемый язык), вероятно, не тот язык. И если вы пытаетесь оптимизировать код PHP, почти наверняка лучше начать с этого.

1 голос
/ 07 апреля 2011

Ну, я бы склонялся ко второму, так как у меня ощущение , что этот вариант более оптимален.И я использую его довольно часто.
Однако, если это станет узким местом, я бы измерил альтернативы.

Во всяком случае, я бы никогда не подумал об этом, пока мои массивы относительно малы - до нескольких сотен элементов.И я бы в любом случае старался избегать таких поисков на тяжелых массивах любой ценой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...