Найти максимальноС число Π² массивС php

МинимальноС ΠΈ максимальноС значСния массива

Π‘Π°ΠΌΡ‹ΠΉ простой способ

РазумССтся, ΠΏΡ€ΠΎΡ‰Π΅ всСго ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ элСмСнты массива с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ min() ΠΈ max() :

Однако Π½Π° Ρ„ΠΎΡ€ΡƒΠΌΠ°Ρ… часто просят Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ скрипт, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π§Π°Ρ‰Π΅ всСго этого Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΏΡ€Π΅ΠΏΠΎΠ΄Π°Π²Π°Ρ‚Π΅Π»ΠΈ ΡƒΡ‡Π΅Π±Π½Ρ‹Ρ… ΡƒΡ‡Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ.

Условия Π·Π°Π΄Π°Ρ‡ΠΈ

1. Найти наибольший наимСньший элСмСнты Π² ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠΌ числовом массивС.
2. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€ минимального ΠΈ максимального элСмСнтов Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива.
3. Найти минимальноС ΠΈ максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ассоциативном массивС.

ΠžΠ±Ρ‰ΠΈΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ поиска элСмСнтов

Π’ΠΎ всСх Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΡ… ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ Π»ΠΎΠ³ΠΈΠΊΡƒ.

Богласно ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ числовой массив ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹. Π’Π°ΠΊΠΆΠ΅ объявим 4 ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Π΅ значСния ΠΈ ΠΈΡ… ΠΊΠ»ΡŽΡ‡ΠΈ:

Π”Π°Π»Π΅Π΅ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ массив Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΈ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ провСряСм, большС Π»ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‡Π΅ΠΌ самоС большоС, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΈ Π΄ΠΎ этого.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с Ρ†ΠΈΠΊΠ»ΠΎΠΌ foreach:

На Π΄Π°Π½Π½ΠΎΠΌ этапС наш ΠΊΠΎΠ΄ ΡƒΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Π½ΠΎ это Π΅Ρ‰Ρ‘ Π½Π΅ всё. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ исходный массив ΠΈ посмотрим Π½Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ элСмСнты с Ρ†ΠΈΠΊΠ»ΠΎΠΌ FOREACH

РСшСниС:

ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ элСмСнты с Ρ†ΠΈΠΊΠ»ΠΎΠΌ WHILE

РСшСниС 1: счётчик + count()

РСшСниС 2: счётчик + isset()

РСшСниС 3: list() + each()

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ»ΡΡ практичСски Π°Π½Π°Π»ΠΎΠ³ foreach. ЕдинствСнный минус Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ начиная с PHP 7.2 функция each() объявлСна ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΉ.

РСшСниС 4: current() + next()

Наибольший ΠΈ наимСньший элСмСнты с Ρ†ΠΈΠΊΠ»ΠΎΠΌ FOR

РСшСниС 1: счётчик + count()

РСшСниС 2: счётчик + isset()

РСшСниС 3: each() + list()

Ѐункция each() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ элСмСнта массива, Π° list() ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ этот массив Π² 2 Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. ПослС послСднСго элСмСнта функция each() Π²Π΅Ρ€Π½Ρ‘Ρ‚ false ΠΈ Ρ†ΠΈΠΊΠ» ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ.

РСшСниС 4: current() + next()

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ next() смСщаСм Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ массива, Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ current() ΠΈ key() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ ΠΈ послСднСС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Π° оставляСм пустыми.

МаксимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ассоциативном массивС

Π’ ассоциативных массивах отсутствуСт порядок ΠΈΠ»ΠΈ ΡΠΈΡΡ‚Π΅ΠΌΠ½ΠΎΡΡ‚ΡŒ Π² названиях ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, поэтому Ρ†ΠΈΠΊΠ»Ρ‹ со счётчиками здСсь нСдоступны.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Найти минимальноС ΠΈ максимальноС число Π² массивС

ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Ρ…, курсовых ΠΈ Π΄ΠΈΠΏΠ»ΠΎΠΌΠ½Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‚ здСсь.

Найти максимальноС ΠΈ минимальноС число Π² массивС
:wall:ΠŸΠΎΠΌΠΎΠ³ΠΈΡ‚Π΅ : Найти максимальноС ΠΈ минимальноС число Π² масивС; ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π­Ρ‚ΠΎΠ³ΠΎ var max.

Найти максимальноС число Π² массивС php. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Найти максимальноС число Π² массивС php. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Найти максимальноС число Π² массивС php. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Найти максимальноС число Π² массивС php. Π€ΠΎΡ‚ΠΎ Найти максимальноС число Π² массивС phpΠ’ Π·Π°Π΄Π°Π½Π½ΠΎΠΌ массивС Ρ†Π΅Π»Ρ‹Ρ… чисСл Π½Π°ΠΉΡ‚ΠΈ максимальноС ΠΈ минимальноС число
Π’ Π·Π°Π΄Π°Π½Π½ΠΎΠΌ массивС Ρ†Π΅Π»Ρ‹Ρ… чисСл Π½Π°ΠΉΡ‚ΠΈ максимальноС ΠΈ минимальноС число, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Найти максимальноС число Π² массивС php. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Найти максимальноС число Π² массивС php. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Найти максимальноС число Π² массивС php. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Найти максимальноС число Π² массивС php. Π€ΠΎΡ‚ΠΎ Найти максимальноС число Π² массивС phpΠ’ Π·Π°Π΄Π°Π½Π½ΠΎΠΌ массивС Ρ†Π΅Π»Ρ‹Ρ… чисСл Π½Π°ΠΉΡ‚ΠΈ максимальноС ΠΈ минимальноС число
Π’ Π·Π°Π΄Π°Π½Π½ΠΎΠΌ массивС Ρ†Π΅Π»Ρ‹Ρ… чисСл Π½Π°ΠΉΡ‚ΠΈ максимальноС ΠΈ минимальноС число, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Ρƒ вас ΠΆΠ΅ ΠΈ Ρ‚Π°ΠΊ понятно Ρ‡Ρ‚ΠΎ минимальноС это 1(0) Π° максимальноС 10 ))

ptenchyk, наш Ρ„ΠΎΡ€ΡƒΠΌ ΠΏΠΎΠ»ΠΎΠ½ Ρ‚Π°ΠΊΠΈΡ… Ρ‚Π΅ΠΌ, ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠΎΠΈΡΠΊΠ°Ρ‚ΡŒ, ΠΏΠ°Ρ€Ρƒ ΠΌΠΈΠ½ΡƒΡ‚. Π”Π° ΠΈ Π³ΡƒΠ³Π» Ρ‚ΠΎΠΆΠ΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚.

ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Ρ…, курсовых ΠΈ Π΄ΠΈΠΏΠ»ΠΎΠΌΠ½Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‚ здСсь.

Найти максимальноС ΠΈ минимальноС число Π² массивС, вывСсти индСксы этих чисСл
НуТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ массива Π² консоли. 1.Π—Π°Π΄Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив, числа Π² массив.

Найти максимальноС число Π² массивС php. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Найти максимальноС число Π² массивС php. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Найти максимальноС число Π² массивС php. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Найти максимальноС число Π² массивС php. Π€ΠΎΡ‚ΠΎ Найти максимальноС число Π² массивС phpКакоС число Π² массивС встрСтится Ρ€Π°Π½ΡŒΡˆΠ΅: максимальноС ΠΈΠ»ΠΈ минимальноС?
КакоС число Π² массивС встрСтится Ρ€Π°Π½ΡŒΡˆΠ΅: максимальноС ΠΈΠ»ΠΈ минимальноС. Если Ρ‚Π°ΠΊΠΈΡ… чисСл нСсколько.

Найти максимальноС число Π² массивС php. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Найти максимальноС число Π² массивС php. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Найти максимальноС число Π² массивС php. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Найти максимальноС число Π² массивС php. Π€ΠΎΡ‚ΠΎ Найти максимальноС число Π² массивС phpΠ’ Π΄Π°Π½Π½ΠΎΠΌ массивС чисСл Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚Π΅ максимальноС Ρ‡Π΅Ρ‚Π½ΠΎΠ΅, ΠΈ минимальноС Π½Π΅Ρ‡Π΅Ρ‚Π½ΠΎΠ΅ число
ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π° ΠΏΡ€ΠΎΠΏΠΈΡˆΠΈΡ‚Π΅ исходный ΠΊΠΎΠ΄ для FreePascal: Π’ Π΄Π°Π½Π½ΠΎΠΌ массивС чисСл Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚Π΅ максимальноС.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Находим наибольшСС ΠΈ наимСньшСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ массива Π½Π° PHP/JavaScript

ΠœΠ°ΡΡΠΈΠ²Ρ‹ – ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡƒΠ΄ΠΎΠ±Π½Ρ‹Ρ… структурированных способов хранСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Ρ‚Π°ΠΊΠΎΠ³ΠΎ массива ΠΈΠΌΠ΅Π΅Ρ‚ своС мСсто, свой ΠΊΠ»ΡŽΡ‡ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ ΠΆΠ΅ массивов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹ΠΌ, ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π±Π°Π·Π° Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ², Π½Π°Π·Π²Π°Π½ΠΈΠΉ ΠΈΠ»ΠΈ ΠΆΠ΅ простых числовых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Говоря ΠΎ числС, ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°ΠΌΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΡΡ‚Π°Π²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° Π·Π°Π΄Π°Ρ‡ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹Π²ΠΎΠ΄ максимального ΠΈΠ»ΠΈ минимального значСния. О Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ это Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… языках программирования, сСгодня ΠΈ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Ρ€Π΅Ρ‡ΡŒ.

Находим наибольшСС ΠΈ наимСньшСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива Π½Π° PHP

ВсС массивы Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΏΠΎ своСй структурС. Рассмотрим Π΄Π²Π° простых ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массива, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ содСрТит Π² сСбС ΠΊΠ»ΡŽΡ‡Π΅ΠΉ:

ΠΈ ΠΎΠ΄ΠΈΠ½, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ, Π½ΠΎ ΡƒΠΆΠ΅ с ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ:

ΠŸΠΎΡΡ‚Π°Ρ€Π°Π΅ΠΌΡΡ вывСсти максимальноС ΠΈ минимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого массива. Для этого ΠΌΡ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ стандартными функциями Β«maxΒ» ΠΈ Β«minΒ» соотвСтствСнно:

Если ΠΌΡ‹ рассмотрим Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ массив, Ρ‚ΠΎ Π² качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡ максимального ΠΈΠ»ΠΈ минимального Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

На ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ массива

это Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

БоотвСтствСнно, ΠΊΠ»ΡŽΡ‡ максимального значСния – это Β«4Β», Π° минимального – Β«6Β».

Находим наибольшСС ΠΈ наимСньшСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива Π½Π° PHP

ΠœΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ своСй Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ. НапримСр, Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π±Π΅Π· ΠΊΠ»ΡŽΡ‡Π΅ΠΉ:

И, соотвСтствСнно, с Π½Π΅ΠΊΠΈΠΌΠΈ ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ:

Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ.

Для Π½Π°Ρ‡Π°Π»Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ здСсь Π½Π°ΠΉΡ‚ΠΈ максимум ΠΈ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅ΠΌ массив Π² ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ:

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для ΠΎΠ±ΠΎΠΈΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Π²Ρ‹ΡˆΠ΅. И Π΄Π°Π»Π΅Π΅, ΠΏΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива, Π²Ρ‹Π²Π΅Π΄Π΅ΠΌ Π½ΡƒΠΆΠ½Ρ‹Π΅ Π½Π°ΠΌ Π΄Π°Π½Π½Ρ‹Π΅:

Π’ качСствС нСбольшого бонуса ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ популярного Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива:

Под ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒΡŽ я ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽ Π½Π΅ содСрТаниС, Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΅Π³ΠΎ структуры. Допустим, Ρ‡Ρ‚ΠΎ здСсь Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ максимального ΠΈ минимального значСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Β«priceΒ».

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС – ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ массив Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с этими Π΄Π°Π½Π½Ρ‹ΠΌΠΈ:

И дальшС ΠΏΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ максимум ΠΈ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ:

На этом Ρ€Π°Π±ΠΎΡ‚Π° с массивами Π½Π° PHP Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π°. Если Π²Π΄Ρ€ΡƒΠ³ структура вашСго массива отличаСтся ΠΈ Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ – Π·Π°Π΄Π°ΠΉΡ‚Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ вопрос Π² коммСнтариях, ΠΏΠΎΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ Π²Π°ΠΌ ΠΏΠΎΠΌΠΎΡ‡ΡŒ.

Находим наибольшСС ΠΈ наимСньшСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива Π½Π° JavaScript

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ PHP, Π² JavaScript Π²ΠΈΠ΄ массивов ΠΊΡƒΠ΄Π° ΠΏΡ€ΠΎΡ‰Π΅, ΠΈ простой ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π˜Π½Π΄Π΅ΠΊΡΡ‹ здСсь Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ Π² этом массивС максимальноС ΠΈ минимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, напишСм Π΄Π²Π΅ своих ΠΏΡ€ΠΎΡΡ‚Π΅Π½ΡŒΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для нахоТдСния Π½ΡƒΠΆΠ½Ρ‹Ρ… Π½Π°ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. ИспользованиС Ρ‚Π°ΠΊΠΆΠ΅ простоС:

Π’ этом случаС Π½Π° экран вывСдутся числа Β«2Β» ΠΈ Β«74Β» ΠΊΠ°ΠΊ минимальноС ΠΈ максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ массива.

Находим наибольшСС ΠΈ наимСньшСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива Π½Π° JavaScript

ΠœΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы Π² JavaScript Ρ‚Π°ΠΊ ΠΆΠ΅ просты, ΠΈ выглядят ΠΎΠ½ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ здСсь Π½Π°ΠΉΡ‚ΠΈ максимум ΠΈ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ. Для Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ напишСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½ΠΎΠΉ ΡƒΠΆΠ΅ Π½Π°ΠΌ схСмС прСдставим этот массив ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ:

И с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Β«MathΒ» ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π½ΡƒΠΆΠ½Ρ‹Π΅ Π½Π°ΠΌ значСния:

На самом Π΄Π΅Π»Π΅ вмСсто ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Β«MathΒ» ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ наши Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ с ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌ массивом, Π½ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π»ΠΈ, Ρ‡Ρ‚ΠΎ Π»ΡŽΠ±ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ нСсколькими способами – здСсь я ΠΏΡ€ΠΈΠ²Π΅Π» Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅.

Ну ΠΈ ΠΏΠΎ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΈ – нСбольшой бонус. Рассмотрим Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив с Ρ‚Π°ΠΊΠΎΠΉ структурой:

Как ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, числовыС значСния Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ массивС находятся Π½Π° Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌ мСстС. Π”Π°Π²Π°ΠΉΡ‚Π΅ напишСм ΠΊΠΎΠ΄ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ значСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· этих Π΄Π°Π½Π½Ρ‹Ρ…:

На этом всС. НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. Π’ΠΏΠ΅Ρ€Π΅Π΄ΠΈ вас ΠΆΠ΄Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ всСго интСрСсного!

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

МаксимальноС число Π² массивС, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π΅Π΅?

Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ всС ΠΎΠΊ, Π½ΠΎ ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚?
1. ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ 0.
2. Или ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ массива Ρ‚ΠΎΠ±ΠΈΡˆ list[0].

А быстрСС встроСнным ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Math.max():
Math.max.apply(null, list)

Найти максимальноС число Π² массивС php. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Найти максимальноС число Π² массивС php. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Найти максимальноС число Π² массивС php. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Найти максимальноС число Π² массивС php. Π€ΠΎΡ‚ΠΎ Найти максимальноС число Π² массивС php

Найти максимальноС число Π² массивС php. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Найти максимальноС число Π² массивС php. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Найти максимальноС число Π² массивС php. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Найти максимальноС число Π² массивС php. Π€ΠΎΡ‚ΠΎ Найти максимальноС число Π² массивС php

Найти максимальноС число Π² массивС php. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Найти максимальноС число Π² массивС php. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Найти максимальноС число Π² массивС php. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Найти максимальноС число Π² массивС php. Π€ΠΎΡ‚ΠΎ Найти максимальноС число Π² массивС php

ΠœΠΈΠ½ΠΈΠΌΡƒΠΌ Ρ‚ΡƒΡ‚ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Π½ΡƒΠΆΠ΅Π½. Если ΡƒΠΆ считаСтС Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Π±Π΅Π· встроСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Ρ‚ΠΎ Π΄Π΅Π»Π°ΠΉΡ‚Π΅ это ΠΊΠ°ΠΊ-Ρ‚ΠΎ Ρ‚Π°ΠΊ:

Найти максимальноС число Π² массивС php. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Найти максимальноС число Π² массивС php. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Найти максимальноС число Π² массивС php. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Найти максимальноС число Π² массивС php. Π€ΠΎΡ‚ΠΎ Найти максимальноС число Π² массивС php

НСпонятно, Π·Π°Ρ‡Π΅ΠΌ – Ρ€Π°Π· ΡƒΠΆ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΈ сСбС «сладкоС» использованиС ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ встроСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² (reduce(), sort(), forEach()), Ρ‚ΠΎ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅ Π²Π·ΡΡ‚ΡŒ сразу ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΉ ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для Π·Π°Π΄Π°Ρ‡ΠΈ )

На собСсСдовании ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π±Π΅Π· использования Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

SlideUp, Π±Π΅Π· ΠΏΠ°Π½ΠΈΠΊΠΈ. Π’ΡƒΡ‚ сортируСм массив ΠΏΠΎ ΡƒΠ±Ρ‹Π²Π°Π½ΠΈΡŽ ΠΈ Π±Π΅Ρ€Ρ‘ΠΌ самый ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт – ΠΎΠ½ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ наибольшим Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ.

Для чисСл ΠΏΡ€ΠΎΡ‰Π΅ всСго просто Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ. Если Π΄Π²Π° числа Ρ€Π°Π²Π½Ρ‹, Π²Π΅Ρ€Π½Ρ‘Ρ‚ 0. Если ΠΎΠ΄Π½ΠΎ большС Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ – ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅, Ссли Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ ΠΈ Π½Π°Π΄ΠΎ для сортировки.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Насколько большиС массивы (ΠΈ значСния) Π² PHP? (Подсказка: ΠžΠ§Π•ΠΠ¬ Π‘ΠžΠ›Π¬Π¨Π˜Π•)

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я Ρ…ΠΎΡ‡Ρƒ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ расход памяти Ρƒ массивов (ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² Ρ†Π΅Π»ΠΎΠΌ) Π² PHP ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ скрипт Π² качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаёт 100 000 ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… цСлочислСнных элСмСнтов массива ΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅ измСряСт количСство использованной памяти.

Π­Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ (для Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ я, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ этого часто Π½Π΅ Π·Π°ΠΌΠ΅Ρ‡Π°ΡŽΡ‚).

Π’ Π½Π°Ρ‡Π°Π»Π΅ я Ρ…ΠΎΡ‡Ρƒ ΠΏΠΎΠ±Π»Π°Π³ΠΎΠ΄Π°Ρ€ΠΈΡ‚ΡŒ Johannes ΠΈ Tyrael Π·Π° ΠΈΡ… ΠΏΠΎΠΌΠΎΡ‰ΡŒ Π² поисках ΡƒΠΊΡ€ΠΎΠΌΠ½Ρ‹Ρ… мСст расхода памяти.

Как Π²Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅ сколько получится? Если Ρ†Π΅Π»ΠΎΠ΅ число это 8 Π±Π°ΠΉΡ‚ (Π½Π° 64 Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ… ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΈΠΏ long) ΠΈ Π΅ΡΡ‚ΡŒ 100 000 Ρ†Π΅Π»Ρ‹Ρ… чисСл, Ρ‚ΠΎ, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, потрСбуСтся 800 000 Π±Π°ΠΉΡ‚. Π­Ρ‚ΠΎ ΠΎΠΊΠΎΠ»ΠΎ 0,76 Мб.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ on-line. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ получится 14 649 024 Π±Π°ΠΉΡ‚. Π”Π°, Π²Ρ‹ Π½Π΅ ΠΎΡΠ»Ρ‹ΡˆΠ°Π»ΠΈΡΡŒ, это 13,97 Мб β€” Π² 18 Ρ€Π°Π· большС, Ρ‡Π΅ΠΌ ΠΌΡ‹ ΠΏΡ€ΠΈΠΊΠΈΠ½ΡƒΠ»ΠΈ.

Π˜Ρ‚Π°ΠΊ, ΠΎΡ‚ΠΊΡƒΠ΄Π° появилось это 18 ΠΊΡ€Π°Ρ‚Π½ΠΎΠ΅ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅?

ΠšΡ€Π°Ρ‚ΠΊΠΎΠ΅ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Π½Π΅ Ρ…ΠΎΡ‡Π΅Ρ‚ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ со всСм этим, Π²ΠΎΡ‚ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€ Π²ΠΎΠ²Π»Π΅Ρ‡Ρ‘Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚.

ΠŸΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅ числа ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π² зависимости ΠΎΡ‚ вашСй ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, компилятора ΠΈ ΠΎΠΏΡ†ΠΈΠΉ компилирования. НапримСр, Ссли Π²Ρ‹ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ PHP с debug ΠΈΠ»ΠΈ thread-safety, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ значСния. Но я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π½Π° рядовой сборкС PHP 5.3 Π½Π° 64 разрядном ЛинуксС.

Если ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ эти 144 Π±Π°ΠΉΡ‚Π° Π½Π° наши 100 000 чисСл, Ρ‚ΠΎ получится 14 400 000 Π±Π°ΠΉΡ‚, Ρ‡Ρ‚ΠΎ составляСт 13,73 Мб. Π”ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎ Π±Π»ΠΈΠ·ΠΊΠΎ ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ, ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ β€” это Π² основном ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ для Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ²(buckets), Π½ΠΎ я расскаТу ΠΎΠ± этом ΠΏΠΎΠ·ΠΆΠ΅.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π²Ρ‹ΡˆΠ΅, Ρ‚ΠΎ Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ дальшС :).

ОбъСдинСниС zvalue_value

Π‘Π½Π°Ρ‡Π°Π»Π° Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊ PHP Ρ…Ρ€Π°Π½ΠΈΡ‚ значСния. Как Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ PHP являСтся слаботипизированным языком, поэтому Π΅ΠΌΡƒ Π½ΡƒΠΆΠ΅Π½ способ быстрого ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ значСниями. PHP ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ объСдинСниС (union), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ zend.h#307 (ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΌΠΎΠΈ):

Если Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅ C, Ρ‚ΠΎ это Π½Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° β€” ΠΊΠΎΠ΄ ΠΎΡ‡Π΅Π½ΡŒ прост: объСдинСниС ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Π² Ρ€ΠΎΠ»ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². НапримСр, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ zvalue_value->lval, Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ΠΊΠ°ΠΊ Ρ†Π΅Π»ΠΎΠ΅ число. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ zvalue_value->ht, Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ (aka массив).

НС Π±ΡƒΠ΄Π΅ΠΌ Π½Π° этом Π·Π°Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ. Π’Π°ΠΆΠ½Ρ‹ΠΌ для нас Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ объСдинСния Ρ€Π°Π²Π΅Π½ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ Π΅Π³ΠΎ ΠΊΡ€ΡƒΠΏΠ½Π΅ΠΉΡˆΠ΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. Π‘Π°ΠΌΡ‹ΠΉ большой ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ β€” это строка (Π½Π° самом Π΄Π΅Π»Π΅ структура zend_object_value ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΠΆΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€, Π½ΠΎ этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ я ΠΎΠΏΡƒΡ‰Ρƒ для простоты). Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° состоит ΠΈΠ· указатСля (8 Π±Π°ΠΉΡ‚) ΠΈ Ρ†Π΅Π»ΠΎΠ³ΠΎ числа (4 Π±Π°ΠΉΡ‚Π°). Π˜Ρ‚ΠΎΠ³ΠΎ 12 Π±Π°ΠΉΡ‚. Благодаря Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΡŽ памяти (структуры Π² 12 Π±Π°ΠΉΡ‚ β€” это Π½Π΅ ΠΊΡ€ΡƒΡ‚ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ 64 Π±ΠΈΡ‚/8 Π±Π°ΠΉΡ‚) ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ структуры Π±ΡƒΠ΄Π΅Ρ‚ 16 Π±Π°ΠΉΡ‚ ΠΈ, соотвСтствСнно, всСго объСдинСния Π² Ρ†Π΅Π»ΠΎΠΌ.

Π˜Ρ‚Π°ΠΊ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π½Π΅ 8 Π±Π°ΠΉΡ‚ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ значСния, Π° 16 β€” Π·Π° счёт динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ PHP. Π£ΠΌΠ½ΠΎΠΆΠΈΠ² Π½Π° 100 000 ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ 1 600 000 Π±Π°ΠΉΡ‚, Ρ‚.Π΅. 1,53 Мб. Но Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΡ‘ΠΌ 13,97 Мб, поэтому ΠΌΡ‹ Π½Π΅ достигли ΠΏΠΎΠΊΠ° Ρ†Π΅Π»ΠΈ.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° zval

Π’ΠΏΠΎΠ»Π½Π΅ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ, Ρ‡Ρ‚ΠΎ union Ρ…Ρ€Π°Π½ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π° PHP, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Π½ΡƒΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ ΠΆΠ΅ Π΅Π³ΠΎ Ρ‚ΠΈΠΏ ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ для сборки мусора. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°, которая содСрТит эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, называСтся zval ΠΈ Π²Ρ‹, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, ΡƒΠΆΠ΅ ΡΠ»Ρ‹ΡˆΠ°Π»ΠΈ ΠΎ Π½Π΅ΠΉ. Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ‚ΠΎΠΌ, Π·Π°Ρ‡Π΅ΠΌ это PHP, я Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΡŽ Sara Golemon. Как Π±Ρ‹ Ρ‚ΠΎ Π½ΠΈ Π±Ρ‹Π»ΠΎ эта структура опрСдСляСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π Π°Π·ΠΌΠ΅Ρ€ структуры опрСдСляСтся суммой Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² всСх Π΅Ρ‘ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚: zvalue_value β€” 16 Π±Π°ΠΉΡ‚ (расчёт Π²Ρ‹ΡˆΠ΅), zend_uint β€” 4 Π±Π°ΠΉΡ‚Π°, zend_uchar β€” 1 Π±Π°ΠΉΡ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ. Π’ ΠΎΠ±Ρ‰Π΅ΠΉ слоТности 22 Π±Π°ΠΉΡ‚Π°. ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅ ΠΈΠ·-Π·Π° выравнивания памяти Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ 24 Π±Π°ΠΉΡ‚Π°.

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ, Ссли ΠΌΡ‹ Ρ…Ρ€Π°Π½ΠΈΠΌ 100 000 Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎ 24 Π±Π°ΠΉΡ‚Π°, Ρ‚ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ 2 400 000 Π±Π°ΠΉΡ‚ ΠΈΠ»ΠΈ 2,29 Мб. Π Π°Π·Ρ€Ρ‹Π² сокращаСтся, Π½ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΅Ρ‰Ρ‘ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π² ΡˆΠ΅ΡΡ‚ΡŒ Ρ€Π°Π· большС.

Π‘Π±ΠΎΡ€Ρ‰ΠΈΠΊ мусора для цикличСских ссылок (PHP 5.3)

PHP 5.3 прСдставила Π½ΠΎΠ²Ρ‹ΠΉ сборщик мусора для цикличСских ссылок. Для этого PHP Ρ…Ρ€Π°Π½ΠΈΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. Π― Π½Π΅ Ρ…ΠΎΡ‡Ρƒ здСсь ΠΎΠ±ΡŠΡΡΠ½ΡΡ‚ΡŒ ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡ‡Π΅Ρ€ΠΏΠ½ΡƒΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ· ΠΌΠ°Π½ΡƒΠ°Π»Π°. Для Π½Π°ΡˆΠΈΡ… расчётов Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ zval оборачиваСтся zval_gc_info:

Как Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Zend Ρ‚ΠΎΠ»ΡŒΠΊΠΎ добавляСт объСдинСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ содСрТит Π΄Π²Π° указатСля. Как Π²Ρ‹ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ объСдинСния опрСдСляСтся самым большим ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ. Оба ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° β€” это ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΏΠΎ 8 Π±Π°ΠΉΡ‚. БоотвСтствСнно, Ρ€Π°Π·ΠΌΠ΅Ρ€ объСдинСния Ρ‚ΠΎΠΆΠ΅ 8 Π±Π°ΠΉΡ‚.

Если ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅ 24 Π±Π°ΠΉΡ‚Π°, Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ 32 Π±Π°ΠΉΡ‚Π°. Π£ΠΌΠ½ΠΎΠΆΠ°Π΅ΠΌ это Π½Π° 100 000 ΠΈ ΠΏΠΎΠ»ΡƒΠ°Π΅ΠΌ 3,05 Мб.

ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ памяти ZEND

Π‘ΠΈ, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ PHP, Π½Π΅ управляСт ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π·Π° вас. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° распрСдСлСниСм памяти. Для этого PHP ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ для своих Π½ΡƒΠΆΠ΄ собствСнный ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ памяти: The Zend Memory Manager. MM Zend основан Π½Π° malloc ΠΎΡ‚ Doug Lea ΠΈ всячСских Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… спСцифичСских для PHP особСнностСй ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ (Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ памяти, очистка послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ запроса ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅).

Π§Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎΠ³ΠΎ для нас Π² этом Ρ‚Π°ΠΊ это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ MM добавляСт Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ выдСлСния памяти, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· Π½Π΅Π³ΠΎ. И опрСдСляСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Как Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя мноТСство ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ ΠΎΠΏΡ†ΠΈΠΉ компилирования. Если хотя Π±Ρ‹ ΠΎΠ΄Π½Π° ΠΈΠ· эти ΠΎΠΏΡ†ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ для Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ памяти Π±ΡƒΠ΄Π΅Ρ‚ большС, ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ½ самым большим, Ссли Π²Ρ‹ скомпилируСтС PHP с Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ ΠΊΡƒΡ‡ΠΈ(heap protection), Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²(thread safety), ΠΎΡ‚Π»Π°Π΄ΠΊΠΎΠΉ ΠΈ MM cookies.

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ всС эти ΠΎΠΏΡ†ΠΈΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹. Π’ этом случаС остаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ size_t _size ΠΈ _prev. size_t Π·Π°Π½ΠΈΠΌΠ΅Ρ‚ 8 Π±Π°ΠΉΡ‚ (64 Π±ΠΈΡ‚Π°), Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π² 16 Π±Π°ΠΉΡ‚ β€” ΠΈ этот Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ добавляСтся для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ выдСлСния памяти.

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ zval снова. На самом Π΄Π΅Π»Π΅ это Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ 32 Π±Π°ΠΉΡ‚Π°, Π° 48, ΠΈΠ·-Π·Π° этого Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°. Π£ΠΌΠ½ΠΎΠΆΠ°Π΅ΠΌ Π½Π° наши 100 000 элСмСнтов ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ 4,58 Мб. Π Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ 13,97 Мб, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠΆΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Π»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Ρ€Π΅Ρ‚ΡŒ.

Π‘Π»ΠΎΠΊΠΈ

Π”ΠΎ сих ΠΏΠΎΡ€ ΠΌΡ‹ рассматривали значСния ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Но структура массива Π² PHP Π·Π°Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ мСста. На самом Π΄Π΅Π»Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ «Массив» здСсь ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Π½ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ. Π’ PHP массив β€” это Π½Π° самом Π΄Π΅Π»Π΅ Ρ…Π΅Ρˆ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹/словари. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΆΠ΅ Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚? Π’ основном для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° гСнСрируСтся Ρ…ΡΡˆ, ΠΈ этот Ρ…ΡΡˆ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π² Β«Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉΒ» C массив. Π₯эши ΠΌΠΎΠ³ΡƒΡ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ²Π°Ρ‚ΡŒ, всС элСмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ Ρ…ΡΡˆΠΈ хранятся Π² связанном спискС. ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ элСмСнту PHP сначала вычисляСт Ρ…ΡΡˆ, ΠΈΡ‰Π΅Ρ‚ Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ(bucket), ΠΈ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎ списку Π² поисках Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ совпадСния элСмСнт Π·Π° элСмСнтом. Π‘Π»ΠΎΠΊ опрСдСляСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ (zend_hash.h#54):

Как Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Β«Π³Ρ€ΡƒΠ·Β» Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ абстрактный массив Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ€ΠΎΠ΄Π΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² PHP (массивы PHP ΡΠ²Π»ΡΡŽΡ‚ΡΡ массивами, словарями ΠΈ связными списками Π² ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎΠΆΠ΅ врСмя, Ρ‡Ρ‚ΠΎ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π°Π½Π½Ρ‹Ρ…). Π Π°Π·ΠΌΠ΅Ρ€ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ это: 8 Π±Π°ΠΉΡ‚ для Ρ‚ΠΈΠΏΠ° ulong, 4 Π±Π°ΠΉΡ‚Π° для uint ΠΈ 7 Ρ€Π°Π· ΠΏΠΎ 8 Π±Π°ΠΉΡ‚ для ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ получаСтся 68. ДобавляСм Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ 72 Π±Π°ΠΉΡ‚Π°.

Для Π±Π»ΠΎΠΊΠΎΠ² ΠΊΠ°ΠΊ ΠΈ для zval Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Π² 16 Π±Π°ΠΉΡ‚, Ρ‡Ρ‚ΠΎ Π΄Π°Ρ‘Ρ‚ Π½Π°ΠΌ 88 Π±Π°ΠΉΡ‚. Π’Π°ΠΊ ΠΆΠ΅ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° эти Π±Π»ΠΎΠΊΠΈ Π² «настоящСм» массивС C (Bucket **arBuckets;), я ΡƒΠΏΠΎΠΌΠ½ΠΈΠ» ΠΎΠ± этом Π²Ρ‹ΡˆΠ΅, Ρ‡Ρ‚ΠΎ добавляСт Π΅Ρ‰Ρ‘ 8 Π±Π°ΠΉΡ‚ Π½Π° элСмСнт. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π² Ρ†Π΅Π»ΠΎΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π±Π»ΠΎΠΊ расходуСт Π² 96 Π±Π°ΠΉΡ‚Π°Ρ… памяти.

И Ρ‚Π°ΠΊ, Ссли Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ Π±Π»ΠΎΠΊ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ значСния β€” это Π±ΡƒΠ΄Π΅Ρ‚ 96 Π±Π°ΠΉΡ‚ для bucket ΠΈ 48 Π±Π°ΠΉΡ‚ для zval, Ρ‡Ρ‚ΠΎ составляСт 144 Π±Π°ΠΉΡ‚Π° Π² ΠΎΠ±Ρ‰Π΅ΠΉ слоТности. Для 100 000 элСмСнтов это Π±ΡƒΠ΄Π΅Ρ‚ 14 400 000 Π±Π°ΠΉΡ‚ ΠΈΠ»ΠΈ 13,73 Мб.

ΠŸΠΎΠ΄ΠΎΠΆΠ΄ΠΈΡ‚Π΅, ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Π΅Ρ‰Ρ‘ 0,24 Мб!

Π­Ρ‚ΠΈ послСдниС 0,24 Мб обусловлСны Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ: Ρ€Π°Π·ΠΌΠ΅Ρ€ Β«Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎΒ» массива C Π² ΠΈΠ΄Π΅Π°Π»Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π²Π΅Π½ количСству элСмСнтов. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ наимСньшСС количСство ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ (Ссли Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ памяти). Но PHP, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ вСсь массив ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΊΠΎΠ³Π΄Π° добавляСтся Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт β€” это Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΠΎΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ. ВмСсто этого PHP всСгда ΡƒΠ΄Π²Π°ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ массива Π±Π»ΠΎΠΊΠΎΠ², Ссли ΠΎΠ½ΠΎ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² ΠΏΡ€Π΅Π΄Π΅Π». Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ€Π°Π·ΠΌΠ΅Ρ€ массива всСгда являСтся ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒΡŽ Π΄Π²ΠΎΠΉΠΊΠΈ.

Π’ нашСм случаС это 2 ^ 17 = 131 072. Но Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 100 000 ΠΈΠ· этих Π±Π»ΠΎΠΊΠΎΠ², поэтому ΠΌΡ‹ оставляСм 31 072 Π±Π»ΠΎΠΊΠ° Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ. Π’Π΅, ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΠ΄ эти Π±Π»ΠΎΠΊΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ (поэтому Π½Π°ΠΌ Π½Π΅ Π½Π°Π΄ΠΎ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹Π΅ 96 Π±Π°ΠΉΡ‚), Π½ΠΎ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΠ΄ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ(ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ хранится Π² Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ массивС Π±Π»ΠΎΠΊΠΎΠ²) Π½Π° Π±Π»ΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ использована. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ 8 Π±Π°ΠΉΡ‚ (Π½Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ) * 31 072 элСмСнтов. Π­Ρ‚ΠΎ 248 576 Π±Π°ΠΉΡ‚ ΠΈΠ»ΠΈ 0,23 Мб. Π§Ρ‚ΠΎ соотвСтствуСт Π½Π΅Π΄ΠΎΡΡ‚Π°ΡŽΡ‰Π΅ΠΉ памяти. (ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π΅Ρ‰Ρ‘ нСсколько Π±Π°ΠΉΡ‚, Π½ΠΎ я Π½Π΅ Ρ…ΠΎΡ‡Ρƒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΡŒ всё. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ Π²Π΅Ρ‰ΠΈ ΠΊΠ°ΠΊ сама структура Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ Ρ‚.Π΄.)

Π—Π°Π³Π°Π΄ΠΊΠ° Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΡˆΠ΅Π½Π°.

О Ρ‡Ρ‘ΠΌ Π½Π°ΠΌ это Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚?

PHP Π½Π΅ C. И это Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Π½Π°ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ± этом. Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ ΠΎΡ‚ супСр-динамичСского языка PHP эффСктивного использования памяти ΠΊΠ°ΠΊ Π² C. НС ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈ всё.

Но, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ использованиС SplFixedArray для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… статичСских массивов.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ скрипт:

Π’ основном ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅ самоС, Π½ΠΎ, Ссли Π²Ρ‹ Π΅Π³ΠΎ запуститС, Ρ‚ΠΎ Π²Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ «всСго лишь» 5 600 640 Π±Π°ΠΉΡ‚. Π§Ρ‚ΠΎ составляСт 56 Π±Π°ΠΉΡ‚ Π½Π° элСмСнт, Π° это Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ мСньшС, Ρ‡Π΅ΠΌ 144 Π±Π°ΠΉΡ‚Π° Π½Π° элСмСнт ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ массива. Π­Ρ‚ΠΎ происходит ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ фиксированный массив Π½Π΅ нуТдаСтся Π² bucket структурС: Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ трСбуСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ zval (48 Π±Π°ΠΉΡ‚) ΠΈ ΠΎΠ΄ΠΈΠ½ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ (8 Π±Π°ΠΉΡ‚) для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта, Ρ‡Ρ‚ΠΎ даст Π½Π°ΠΌ Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΡ‹Π΅ 56 Π±Π°ΠΉΡ‚.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Leave a Reply

Your email address will not be published. Required fields are marked *