У меня вопрос, что быстрее …
Просто попробуй 🙂
С 5 переменными
$myvar1 = 'hello'; $myvar2 = 'hello'; $myvar3 = 'hello'; $myvar4 = 'hello'; $myvar4 = 'hello'; print_r(memory_get_usage());
Resut: 618600
с 5 ключами массива
$myvar = array(); $myvar['var1'] = 'hello'; $myvar['var2'] = 'hello'; $myvar['var3'] = 'hello'; $myvar['var4'] = 'hello'; $myvar['var5'] = 'hello'; print_r(memory_get_usage());
Resut: 620256
Короткие: доступ к переменной выполняется быстрее.
Но все же вы можете использовать массивы из-за лучшего качества кода . Для повышения производительности используйте кеширование. В любом случае вы должны решать проблемы производительности только тогда, когда они происходят!
$n = 1000000; $startTime = microtime(true); for ($i = 0; $i <= $n; $i++) { $x = $a[1]; } $endTime = microtime(true); $elapsed = $endTime - $startTime; echo "Array: $elapsed seconds";
$startTime = microtime(true); for ($i = 0; $i <= $n; $i++) { $x = $v; } $endTime = microtime(true); $elapsed = $endTime - $startTime; echo "Variable : $elapsed seconds";
Массив: 0,092 секунды
Переменная: 0,064 секунды
Также узел, который использует массивы со строкой в качестве индекса, будет намного медленнее (hashmap). Сравните zend_hash_find vs zend_hash_index_find .
Насколько велик массив, на самом деле не имеет значения, если я использую $a = array_fill( 0, 1000, 1 );
и $x = $a2[999];
Не спрашивайте, но и интересным является использование памяти. Поэтому я создал массив с 10000 элементами и 10000 переменных.
$a = array(); for ($i = 0; $i <= 10000; $i++) { // one array eval('$a[] = "test";'); // 3454128 // Variables //eval('$a' . $i. ' = "test";'); // 3552360 } print_r(memory_get_usage());
Массив: 3454128
Переменные: 3552360
Таким образом, массивы используют немного меньше памяти.
Люди здесь говорят, что массивы быстрее. Но массивы также являются переменными. если вы используете массив – вам все равно нужно получить к нему доступ, как и любую переменную, и, кроме того, вам нужно получить доступ к элементу массива. Итак, мне кажется, что массив, используемый как хранилище для переменных, не самая лучшая идея.
Дополнительно – массивы используются для хранения данных массива. Например, например категории id => пары имен категорий.
$catId1 = "Category 1"; $catId2 = "Category 2"; $catId3 = "Category 3";
Код, подобный выше, был бы … странным. Вы теряете многие функции массива, например, не можете проходить через все категории в цикле. Итак, для массива данных – массив – это то, что вам нужно.
Когда у вас есть разные типы данных (говоря о значении этих данных, а не о типе типа integer или string), вам лучше использовать переменные:
$requested_category = 1; $requested_category_name = "Some category"; $category_processing_result = "Ok";
вместо массива:
$varsArray['requested_category'] = 1; $varsArray['requested_category_name'] = "Some category"; $varsArray['category_processing_result'] = "Ok";
С помощью переменных любая IDE поможет вам записать эти имена, такой код легче читать и поддерживать. И это более важно, как и для меня.
Даже если они чем-то медленнее или занимают больше памяти – это не худшая проблема с точки зрения скорости / использования памяти.
Хранение всех ваших данных в одном массиве может быть быстрее, в зависимости от того, как вы обрабатываете свои данные. Я бы рекомендовал группировать каждую группу данных, которая имеет близкое отношение к eachother в массиве.
Надеюсь это поможет.
Многие переменные быстрее, чем массив, потому что массив – упорядоченная карта ( http://php.net/manual/en/language.types.array.php ), и поэтому по определению для каждого значения в массиве также назначается ссылочный ключ к значению в массиве. Это требует дополнительной памяти и может иметь значительное влияние, если говорить о сотнях тысяч записей в массиве. Производительность уменьшается по мере увеличения количества записей. Этих издержек можно избежать, если вместо массивов использовать скалярные переменные.
Недавно я работал над профилировщиком для измерения памяти и времени выполнения с использованием обратного вызова tick. Сначала я использовал массив для регистрации событий и отслеживания всех измерений на каждом интервале тика. После ввода этих значений в отдельные скалярные переменные вместо массива я обнаружил, что производительность значительно увеличилась (между 10 и 20% при 100000 – 1000000 записей соответственно).
Однако, когда массив имеет только несколько записей, разница со скалярными переменными нигиль, и производительность не должна быть проблемой. В таких случаях массивы могут лучше подойти к ситуации и быть более эффективными, улучшать читаемость, обслуживание и т. Д.
сделать все относительные данные в массиве, массивы быстрее.