Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Kotlin | ΠœΠ°ΡΡΠΈΠ²Ρ‹

ΠœΠ°ΡΡΠΈΠ²Ρ‹

ПослСднСС обновлСниС: 24.05.2021

Для хранСния Π½Π°Π±ΠΎΡ€Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² Kotlin, ΠΊΠ°ΠΊ ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках программирования, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ массивы. ΠŸΡ€ΠΈ этом массив ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ°. Π’ Kotlin массивы прСдставлСны Ρ‚ΠΈΠΏΠΎΠΌ Array.

ΠŸΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ массива послС Ρ‚ΠΈΠΏΠ° Array Π² ΡƒΠ³Π»ΠΎΠ²Ρ‹Ρ… скобках Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΊΠ°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠ³ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² массивС. НапримСр, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ массив Ρ†Π΅Π»Ρ‹Ρ… чисСл:


val numbers: Array<Int>

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ встроСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ arrayOf() ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ массив:


val numbers: Array<Int> = arrayOf(1, 2, 3, 4, 5)

Π’ΠΎ Π΅ΡΡ‚ΡŒ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π² массивС 5 чисСл ΠΎΡ‚ 1 Π΄ΠΎ 5.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ индСксов ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ элСмСнту Π² массивС. Π˜Π½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡ начинаСтся с нуля, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ индСкс 0. ИндСкс указываСтся Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках:


val numbers: Array<Int> = arrayOf(1, 2, 3, 4, 5)
val n = numbers[1]  // ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π²Ρ‚ΠΎΡ€ΠΎΠΉ элСмСнт  n=2
numbers[2] = 7      // пСрСустанавливаСм Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ элСмСнт
println("numbers[2] = ${numbers[2]}") // numbers[2] = 7

Π’Π°ΠΊΠΆΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив значСниями ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ способом:


val numbers = Array(3, {5})	// [5, 5, 5]

Π—Π΄Π΅ΡΡŒ примСняСтся конструктор класса Array. Π’ этот конструктор ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, сколько элСмСнтов Π±ΡƒΠ΄Π΅Ρ‚ Π² массивС. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС 3 элСмСнта. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ прСдставляСт Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ элСмСнты массива. Оно Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках стоит число 5, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ всС элСмСнты массива Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ число 5. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, массив Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… пятСрок.

Но Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ создаСт элСмСнты массива, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ Π±ΠΎΠ»Π΅Π΅ слоТным. НапримСр:


var i = 1;
val numbers = Array(3, { i++ * 2}) // [2, 4, 6]

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС элСмСнт массива являСтся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ умноТСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ i Π½Π° 2. ΠŸΡ€ΠΈ этом ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½ΠΎΠΉ i Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ увСличиваСтся Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ.

ΠŸΠ΅Ρ€Π΅Π±ΠΎΡ€ массивов

Для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° массивов ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ†ΠΈΠΊΠ» for:


fun main() {

    val numbers = arrayOf(1, 2, 3, 4, 5)
    for(number in numbers){
        print("$number \t")
    }
}

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС пСрСмСнная numbers прСдставляСт массив чисСл. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π΅ этого массива Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π΅Π³ΠΎ элСмСнт оказываСтся Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

number, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΌΠΎΠΆΠ½ΠΎ вывСсти Π½Π° консоль. ΠšΠΎΠ½ΡΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ массивы ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ²:


fun main() {

    val people = arrayOf("Tom", "Sam", "Bob")
    for(person in people){
        print("$person \t")
    }
}

ΠšΠΎΠ½ΡΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

МоТно ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Ρ†ΠΈΠΊΠ»ΠΎΠ² для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° массива. НапримСр, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ†ΠΈΠΊΠ» while:


fun main() {

    val people = arrayOf("Tom", "Sam", "Bob")
    
    var i = 0
    while( i in people.indices){
        println(people[i])
        i++;
    }
}

Π—Π΄Π΅ΡΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ пСрСмСнная i, которая прСдставляСт индСкс элСмСнта массива. Π£ массива Π΅ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ свойство indices, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ содСрТит Π½Π°Π±ΠΎΡ€ всСх индСксов. А Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ i in people.indices Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true, Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ i Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Π½Π°Π±ΠΎΡ€ индСксов массива.

Π’ самом Ρ†ΠΈΠΊΠ»Π΅ ΠΏΠΎ индСксу обащаСмся ΠΊ элСмСнту массива: println(people[i]). И Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ индСксу, увСличивая счСтчик: i++.

Π’ΠΎ ΠΆΠ΅ самоС ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° for:


for (i in people.indices) {
	println(people[i])
}

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° наличия элСмСнта Π² массивС

Как ΠΈ Π² случаС с ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΈΠ»ΠΈ отсутствиС элСмСнтов Π² массивС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² in ΠΈ !in:


val numbers: Array<Int> = arrayOf(1, 2, 3, 4, 5)

println(4 in numbers)       // true
println(2 !in numbers)      // false

ΠœΠ°ΡΡΠΈΠ²Ρ‹ для Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ²

Для упрощСния создания массива Π² Kotlin ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ BooleanArray, ByteArray, ShortArray, IntArray, LongArray, CharArray, FloatArray ΠΈ DoubleArray, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ массивы для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². НапримСр, Ρ‚ΠΈΠΏ IntArray позволяСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Int, Π° DoubleArray — массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Double:


val numbers: IntArray = intArrayOf(1, 2, 3, 4, 5)
val doubles: DoubleArray = doubleArrayOf(2.4, 4.5, 1.2)

Для опрСдСлСния Π΄Π°Π½Π½Ρ‹Ρ… для этих массивов ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ Π½Π° Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Π² Π½ΠΈΠΆΠ½Π΅ΠΌ рСгистрС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, int, ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ΄Π΅Ρ‚ ArrayOf.

Аналогично для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… массивов Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ конструктор ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡˆΠ΅Π³ΠΎ класса:


val numbers = IntArray(3, {5})
val doubles = DoubleArray(3, {1.5})

Π”Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы

Π’Ρ‹ΡˆΠ΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π»ΠΈΡΡŒ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ ряда ΠΈΠ»ΠΈ строки Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Но ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, возьмСм Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив — Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ массив, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ сам являСтся массивом. Π”Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π³Π΄Π΅ каТдая строка — это ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ массив, Π° ячСйки строки — это элСмСнты Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ массива.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов ΠΌΠ΅Π½Π΅Π΅ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятно ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ слоТности. НапримСр, Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив чисСл:


val table: Array<Array<Int>> = Array(3, { Array(5, {0}) })

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚Ρ€ΠΈ элСмСнта — Ρ‚Ρ€ΠΈ строки. КаТдая строка Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎ ΠΏΡΡ‚ΡŒ элСмСнтов, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π²Π΅Π½ 0.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ индСксы, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ подмассивам Π² ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΌ массивС, Π² Ρ‚ΠΎΠΌ числС ΠΏΠ΅Ρ€Π΅ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… значСния:


val table = Array(3, { Array(3, {0}) })
table[0] = arrayOf(1, 2, 3)		// пСрвая строка Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹
table[1] = arrayOf(4, 5, 6)		// вторая строка Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹
table[2] = arrayOf(7, 8, 9)		// Ρ‚Ρ€Π΅Ρ‚ΡŒΡ строка Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

Для обращСния ΠΊ элСмСнтам подмассивов Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ Π΄Π²Π° индСкса. По ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ индСксу ΠΈΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ строки, Π° ΠΏΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ индСксу — столбца Π² Ρ€Π°ΠΌΠΊΠ°Ρ… этой строки:


val table = Array(3, { Array(3, {0}) })
table[0][1] = 6  // Π²Ρ‚ΠΎΡ€ΠΎΠΉ элСмСнт ΠΏΠ΅Ρ€Π²ΠΎΠΉ строки
val n = table[0][1]		// n = 6

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄Π²Π° Ρ†ΠΈΠΊΠ»Π°, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы:


fun main() {

    val table: Array<Array<Int>> = Array(3, { Array(3, {0}) })
    table[0] = arrayOf(1, 2, 3)
    table[1] = arrayOf(4, 5, 6)
    table[2] = arrayOf(7, 8, 9)
    for(row in table){

        for(cell in row){
            print("$cell \t")
        }
        println()
    }
}

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ внСшнСго Ρ†ΠΈΠΊΠ»Π° for(row in table) пробСгаСмся ΠΏΠΎ всСм элСмСнтам Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎ строкам Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· элСмСнтов Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива сам прСдставляСт массив, поэтому ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΠ±Π΅ΠΆΠ°Ρ‚ΡŒΡΡ ΠΏΠΎ этому массиву ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ· Π½Π΅Π³ΠΎ нСпосрСдствСнно Ρ‚Π΅ значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² Π½Π΅ΠΌ хранятся. Π’ ΠΈΡ‚ΠΎΠ³Π΅ Π½Π° консоль Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° массивов — PHP: ΠœΠ°ΡΡΠΈΠ²Ρ‹

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° массивов β€” самая базовая алгоритмичСская Π·Π°Π΄Π°Ρ‡Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅Ρ€Π΅Π΄ΠΊΠΎ ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚ Π½Π° собСсСдованиях. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ массивы ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡƒΠΆΠ΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π’ΠΎΠ³Π΄Π° для Ρ‡Π΅Π³ΠΎ Π·Π°Π΄Π°ΡŽΡ‚ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ вопросы? ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΡΠΎΠ±Π΅ΡΠ΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ…ΠΎΡ‡Π΅Ρ‚ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

  1. Насколько Π²Ρ‹ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π² курсС ΠΎ сущСствовании Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ².
  2. Бпособны Π»ΠΈ Π²Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.
  3. Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ вашС алгоритмичСскоС ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΠ΅.

Π—Π½Π°Π½ΠΈΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ влияСт Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅ ΠΈ насколько быстро сообраТаСтС. И хотя Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ всС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, Π½ΡƒΠΆΠ½ΠΎ хотя Π±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ прСдставлСниС ΠΎ самых ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… ΠΈ Π² ΠΈΠ΄Π΅Π°Π»Π΅ ΡƒΠΌΠ΅Ρ‚ΡŒ ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ. Π’ нашСм спискС Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹Ρ… ΠΊΠ½ΠΈΠ³ Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠ΄Π½Π° ΠΊΠ½ΠΈΠ³Π°, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ посвящённая Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌ.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π ΠΎΠ±Π΅Ρ€Ρ‚ ΠœΠ°Ρ€Ρ‚ΠΈΠ½ (Π°Π²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½Ρ‹ΠΉ программист, ΠΏΠΎ ΠΊΠ½ΠΈΠ³Π°ΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ учится вСсь ΠΌΠΈΡ€) Π² своСй ΠΊΠ½ΠΈΠ³Π΅ Β«Π˜Π΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ программист» рассказываСт ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ ΠšΠ°Ρ‚Π° β€” понятии, взятом ΠΈΠ· Π±ΠΎΠ΅Π²Ρ‹Ρ… искусств.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ изучСния Π±ΠΎΠ΅Π²ΠΎΠ³ΠΎ искусства Π½Π° основС ΠΊΠ°Ρ‚Π° состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ повторяя ΠΊΠ°Ρ‚Π° ΠΌΠ½ΠΎΠ³ΠΈΠ΅ тысячи Ρ€Π°Π·, ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊ Π±ΠΎΠ΅Π²ΠΎΠ³ΠΎ искусства ΠΏΡ€ΠΈΡƒΡ‡Π°Π΅Ρ‚ своё Ρ‚Π΅Π»ΠΎ ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° двиТСниям, выводя ΠΈΡ… Π½Π° Π±Π΅ΡΡΠΎΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, попадая Π² Π±ΠΎΠ΅Π²ΡƒΡŽ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, Ρ‚Π΅Π»ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ «само» Π½Π° основС рСфлСксов, Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½Ρ‹ΠΌ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠ°Ρ‚Π°. Π’Π°ΠΊΠΆΠ΅ считаСтся, Ρ‡Ρ‚ΠΎ ΠΊΠ°Ρ‚Π° ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ ΠΌΠ΅Π΄ΠΈΡ‚Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ воздСйствиСм.

Π ΠΎΠ±Π΅Ρ€Ρ‚ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ врСмя ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ классичСскиС алгоритмичСскиС Π·Π°Π΄Π°Ρ‡ΠΊΠΈ для поддСрТания Ρ„ΠΎΡ€ΠΌΡ‹. Π­Ρ‚Π° Ρ‚Π΅ΠΌΠ° стала Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ популярной, Ρ‡Ρ‚ΠΎ Ссли Π·Π°Π³ΡƒΠ³Π»ΠΈΡ‚ΡŒ php github kata, Ρ‚ΠΎ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ мноТСство Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² с ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ Π·Π°Π΄Π°Ρ‡ΠΊΠ°ΠΌΠΈ.

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ°

Бпособов ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив достаточно ΠΌΠ½ΠΎΠ³ΠΎ. Π‘Π°ΠΌΡ‹ΠΉ популярный для обучСния β€” ΠΏΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠ²Π°Ρ сортировка (bubble sort).

Алгоритм состоит ΠΈΠ· ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΎΠ² ΠΏΠΎ сортируСмому массиву. Π—Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ элСмСнты ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠΏΠ°Ρ€Π½ΠΎ ΠΈ, Ссли порядок Π² ΠΏΠ°Ρ€Π΅ Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ, выполняСтся ΠΎΠ±ΠΌΠ΅Π½ элСмСнтов. ΠŸΡ€ΠΎΡ…ΠΎΠ΄Ρ‹ ΠΏΠΎ массиву ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‚ΡΡ N-1 Ρ€Π°Π· ΠΈΠ»ΠΈ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅ Π½Π΅ окаТСтся, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΠΌΠ΅Π½Ρ‹ большС Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ β€” массив отсортирован. ΠŸΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΏΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌΡƒ Ρ†ΠΈΠΊΠ»Ρƒ, ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ наибольший элСмСнт массива ставится Π½Π° своё мСсто Π² ΠΊΠΎΠ½Ρ†Π΅ массива рядом с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ «наибольшим элСмСнтом», Π° наимСньший элСмСнт пСрСмСщаСтся Π½Π° ΠΎΠ΄Π½Ρƒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΊ Π½Π°Ρ‡Π°Π»Ρƒ массива («всплываСт» Π΄ΠΎ Π½ΡƒΠΆΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, ΠΊΠ°ΠΊ ΠΏΡƒΠ·Ρ‹Ρ€Ρ‘ΠΊ Π² Π²ΠΎΠ΄Π΅. ΠžΡ‚ΡΡŽΠ΄Π° ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°).

Π’ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ сСрвисы, Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ процСсс сортировки, Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ пониманию, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

<!— end list —>

Kotlin. Π¦ΠΈΠΊΠ»Ρ‹ for, while, do-while, forEach, repeat()

Π‘Ρ‚Π°Ρ‚ΡŒΡ ΠΏΡ€ΠΎΠΏΠ»Π°Ρ‡Π΅Π½Π° кошками — всСмирно извСстными производитСлями котят.

Если ΡΡ‚Π°Ρ‚ΡŒΡ Π²Π°ΠΌ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»Π°ΡΡŒ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.

for

Π¦ΠΈΠΊΠ» for Π² Kotlin ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ синтаксис. ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° Π΅ΡΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ — массив, Map ΠΈ Ρ‚.Π΄. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ±Π΅ΠΆΠ°Ρ‚ΡŒΡΡ ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ числу элСмСнтов, описываСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.


for(i in 1..5){
    println(i)
}

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ in ΠΈ Π΅Π³ΠΎ Π±Ρ€Π°Ρ‚ !in ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ отсутствиС вхоТдСния Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½.

Π’ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ 1..5 ΠΌΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΎΡ‚ 1 Π΄ΠΎ 5 (ΠΏΡΡ‚ΡŒ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½). ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅


1
2
3
4
5

Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.


val range = 1..5
for(i in range){
    println("Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ $i")
}

ВмСсто Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ массив.


val cats = arrayListOf<String>()
cats.add("ΠœΡƒΡ€Π·ΠΈΠΊ")
cats.add("Π’Π°ΡΡŒΠΊΠ°")
cats.add("Барсик")
    
for(cat in cats){
    println("ΠšΠΎΡ‚ $cat")
}

// Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚
ΠšΠΎΡ‚ ΠœΡƒΡ€Π·ΠΈΠΊ
ΠšΠΎΡ‚ Π’Π°ΡΡŒΠΊΠ°
ΠšΠΎΡ‚ Барсик

Π­Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ индСкс:


for (index in cats.indices){
    println("ΠšΠΎΡ‚ ${cats[index]}")
}

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, являСтся Π»ΠΈ символ Π½Π΅ Ρ†ΠΈΡ„Ρ€ΠΎΠΉ.


fun isNotDigit(c: Char) = c !in '0'..'9'

println(isNotDigit('3')) // false, это всё-Ρ‚Π°ΠΊΠΈ Ρ†ΠΈΡ„Ρ€Π°

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ index, element ΠΈ withIndex() ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ индСкс ΠΈ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² массивС.


val cats = arrayListOf("Barsik", "Murzik", "Vaska")
for( (index, element) in cats.withIndex()){
    println("$index: $element")
}

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ.


0: ΠœΡƒΡ€Π·ΠΈΠΊ
1: Π’Π°ΡΡŒΠΊΠ°
2: Барсик

А ΠΊΠ°ΠΊ Π±Ρ‹Ρ‚ΡŒ с Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ счётчик Π½Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ, Π° ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒ Π½Π° 2? Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова downTo ΠΈ step.


for(i in 10 downTo 1 step 2){
    print("$i ")
}
// Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚: 10 8 6 4 2

Π‘Π΅Π· указания шага значСния Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒΡΡ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ.


for(i in 10 downTo 1){
    print("$i ")
}

// 10 9 8 7 6 5 4 3 2 1 

for (letter in 'Z' downTo 'A') print(letter)
// ZYXWVUTSRQPONMLKJIHGFEDCBA

ΠžΡ‡Π΅Π½ΡŒ часто Π² Ρ†ΠΈΠΊΠ»Π°Ρ… встрСчаСтся Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ size-1, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π²Ρ‹ΠΉΡ‚ΠΈ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ массива. МоТно Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π° until.


for(i in 0..cats.size - 1){
    println(cats[i])
}
    
for(i in 0 until cats.size){
    println(cats[i])
}

Π₯ΠΎΡ‚ΠΈΠΌ Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° ΠΏΡ€ΠΈ достиТСнии ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ значСния.


for (i in 1..5) {
    println(i)
	// ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€, ΠΊΠΎΠ³Π΄Π° достигнСм значСния 3
    if (i == 3)
        break
}

// ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ
1
2
3

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово continue позволяСт ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€, ΠΏΡ€ΠΈ этом ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²ΠΎ врСмя ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΡΡƒΠΊΠ½ΡƒΡ‚ΡŒ. Число 5 ΠΏΡ€ΠΈ этом Π½Π΅ выводится.


println("For loop 1 to 10 continue if number is 5")
for (i in 1..10) {
    if (i == 5) {
        println("Meow")
        continue
    }
    println(i)
}

// Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚
For loop 1 to 10 continue if number is 5
1
2
3
4
Meow
6
7
8
9
10

Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹ for

Часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΄Π²Π° Ρ†ΠΈΠΊΠ»Π° for. ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚.


// ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ†ΠΈΠΊΠ»
for(x in 1..3){
    // Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ»
    for(y in 1..3){
        print("$x $y \n")
    }
}

// Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3

Если ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ досрочно ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ этапС Ρ†ΠΈΠΊΠ», Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ outerLoop@ ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ Ρ†ΠΈΠΊΠ»Ρƒ ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ break@outerLoop. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ значСния станут Ρ€Π°Π²Π½Ρ‹ΠΌΠΈ (2 2), Ρ†ΠΈΠΊΠ» Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ досрочно.


// ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ†ΠΈΠΊΠ»
outerLoop@ for (x in 1..3) {
    // Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ»
    for (y in 1..3) {
        print("$x $y \n")
        if (x == 2 && y == 2)
            break@outerLoop
    }
}

// Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚
1 1
1 2
1 3
2 1
2 2

forEach

ΠŸΡ€ΠΎΠΉΡ‚ΠΈΡΡŒ ΠΏΠΎ всСм элСмСнтам ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ.


val daysOfWeek = listOf("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday")
daysOfWeek.forEach{
    println(it)
}

repeat()

ВстроСнная функция для повторСния ΠΊΠΎΠΌΠ°Π½Π΄ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ число Ρ€Π°Π·.


repeat(3){
    println("Π’Π°ΡΡŒΠΊΠ°! Иди ΠΆΡ€Π°Ρ‚ΡŒ!")
}

while

Π¦ΠΈΠΊΠ» while Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ стандартным способом — ΠΏΠΎΠΊΠ° условиС остаётся истинным, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² Π±Π»ΠΎΠΊΠ΅ Ρ†ΠΈΠΊΠ»Π°. Если ΠΊΠΎΠ΄ послС условия Ρ†ΠΈΠΊΠ»Π° состоит ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ строчки, Ρ‚ΠΎ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ.


var i = 1
while (i 

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ числа ΠΎΡ‚ 0 Π΄ΠΎ 8, Π½ΠΎ Ссли ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ‡Π΅ΠΌΡƒ Ρ€Π°Π²Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ послС Ρ†ΠΈΠΊΠ»Π°, Ρ‚ΠΎ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ большС.

ΠŸΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Π΅Ρ€Π΅Π· break.


var i = 1
while (i 

do-while

ВыполняСм ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρƒ, ΠΏΠΎΠΊΠ° выполняСтся ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ условиС — Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ число, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ увСличиваСтся Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ, ΠΏΠΎΠΊΠ° число мСньшС 10.


var i = 1
do {
    println(i)
    i++
} while (i 

МоТно ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» Ρ‡Π΅Ρ€Π΅Π· break. Когда число станСт Ρ€Π°Π²Π½Ρ‹ΠΌ 5, Ρ†ΠΈΠΊΠ» прСкратится.


var i = 1

do {
    println(i)
    if (i == 5)
        break
    i++
} while (i 

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹

for для строки

Π Π΅ΠΊΠ»Π°ΠΌΠ°

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Powershell Foreach, while ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Ρ‹

Π’Π°ΠΆΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ шагом Π² ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ являСтся Ρ€Π°Π±ΠΎΡ‚Π° с Ρ†ΠΈΠΊΠ»Π°ΠΌΠΈ

, К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, PowerShell ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ расти вмСстС с вашими Π½Π°Π²Ρ‹ΠΊΠ°ΠΌΠΈ.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ дСнь, Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ врСмя ΠΈ усилия. Π’Π°ΡˆΠΈ сцСнарии Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Ρ‚ΡΠΆΠ΅Π»ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π²Ρ‹ выполняСтС Π²Π°ΠΆΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ β€” Ρ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ большС статСй Π½Π° MakeUseOf!

ΠŸΠ΅Ρ‚Π»ΠΈ Powershell ForEach: Π΄Π²Π΅Ρ€ΡŒ Π² Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π΄Π°Π½Π½Ρ‹Ρ…

ForEach β€” это псСвдоним ForEach-Object. (ПсСвдоним β€” это просто ярлык для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² PowerShell.) БСйчас самоС врСмя ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ PowerShell ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅.

Как ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ соврСмСнных языков программирования, PowerShell являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ

, ВсС Π² PowerShell являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ свойства ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

, ИмСнно ΠΈΠ·-Π·Π° этого свойства Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ поиск ΠΏΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ Π² ΠΈΡ‚ΠΎΠ³Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ массив Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ².

$yourVar = Get-ChildItem *
foreach ($file in $yourVar){
Your Steps
}

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… языках ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° этого массива Π±ΡƒΠ΄Π΅Ρ‚ многоэтапным процСссом. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π΄Π»ΠΈΠ½Ρƒ, Π° Π·Π°Ρ‚Π΅ΠΌ просчитываСм ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ шаг.

Π’ PowerShell Π²Ρ‹ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚Π΅ массив ΠΈ выполняСтС дСйствиС для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ForEach. Π­Ρ‚ΠΎ сэкономит Π²Π°ΠΌ нСсколько строк ΠΊΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ скрипт. НапримСр, Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ нСбольшой скрипт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρƒ Ρ†ΠΈΠΊΠ»ΠΎΠ² Powershell ForEach. Он создаСт ZIP-Π°Ρ€Ρ…ΠΈΠ² всСх Π²Π°ΡˆΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π½Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π»ΠΈ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ 30 Π΄Π½Π΅ΠΉ.

ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ систСмы Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ Π°Ρ€Ρ…ΠΈΠ²Π° с использованиСм Ρ†ΠΈΠΊΠ»ΠΎΠ² ForEach

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΡΠ»ΠΎΠΌΠ°Ρ‚ΡŒ шаги Π²Π½ΠΈΠ·. Π’Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΡˆΡŒ Get-ChildItem Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС Ρ„Π°ΠΉΠ»Ρ‹ Π² ΠΏΠ°ΠΏΠΊΠ΅ Β«Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹Β». ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ срСды

$ ENV: USERPROFILE запускаСт скрипт, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ. Π­Ρ‚Π° пСрСмСнная Π±ΠΎΠ»Π΅Π΅ пСрСносима, Ρ‡Π΅ΠΌ ТСстко Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ этого поиска ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $ MyDocs. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ создаСм наш Ρ†ΠΈΠΊΠ» ForEach, заставляя Π΅Π³ΠΎ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ $ Doc Π² $ MyDocs.

$oldDocs = @()
$MyDocs = Get-ChildItem -Path "$($env:USERPROFILE)\Documents" -Recurse
foreach ($doc in $MyDocs){
if($doc.LastAccessTime -lt $(Get-Date).addDays(-30)){
$oldDocs += $doc
}
}
$ArchiveFolder = New-Item -Path "$($env:USERPROFILE)\Documents\$((Get-Date -Format MMddyy).toString())" -ItemType Directory
foreach ($doc in $oldDocs){
Move-Item -Path $doc.FullName -Destination "$($ArchiveFolder.FullName)\$($doc.Name)" -Confirm $false
}
$source = $ArchiveFolder.FullName
$destination = "$($env:USERPROFILE)\Documents\$($ArchiveFolder.Name).zip"
Add-Type -AssemblyName "system.io.compression.filesystem"
[io.compression.zipfile]::CreateFromDirectory($source, $destination)
if(test-path $destination){
Remove-Item -Path $ArchiveFolder -Recurse -Confirm $false
}

Π’Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° ΠΌΡ‹ провСряСм, Π΅ΡΡ‚ΡŒ Π»ΠΈ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° LastAccessTime Π½Π΅Π΄Π²ΠΈΠΆΠΈΠΌΠΎΡΡ‚ΡŒ ΡΡ‚Π°Ρ€ΡˆΠ΅ 30 Π΄Π½Π΅ΠΉ. ΠœΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ это с Get-Date ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚, ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ AddDays функция с ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ‚Ρ€ΠΈΠ΄Ρ†Π°Ρ‚ΡŒ. Если это Ρ‚Π°ΠΊ, ΠΌΡ‹ добавляСм Ρ„Π°ΠΉΠ» Π² $ myOldDocs массив. ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ сортировка Ρ„Π°ΠΉΠ»ΠΎΠ² Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°, ΠΌΡ‹ Π±Π΅Ρ€Π΅ΠΌ наш Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π½Ρ‹ΠΉ массив ΠΈ создаСм zip-Ρ„Π°ΠΉΠ». Π­Ρ‚ΠΎΡ‚ процСсс Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ слоТнСС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΡŽ .NET. НС Π±Π΅ΡΠΏΠΎΠΊΠΎΠΉΡ‚Π΅ΡΡŒ, Ссли Π²Ρ‹ Π½Π΅ совсСм поняли β€” Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΡ€Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΈΠ· этого справочного Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° TechNet.

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ здСсь происходит: ΠΌΡ‹ пСрСмСстим всС наши старыС Ρ„Π°ΠΉΠ»Ρ‹ Π² Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ с сСгодняшнСй Π΄Π°Ρ‚ΠΎΠΉ ΡΡ‚Π°Ρ€ΡˆΠ΅ 30 Π΄Π½Π΅ΠΉ. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ эта ΠΏΠ°ΠΏΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ создана, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ZIP-Π°Ρ€Ρ…ΠΈΠ² с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ. ΠœΡ‹ протСстируСм, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π°Ρ€Ρ…ΠΈΠ² ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½, ΠΈ Π² Π½Π΅ΠΌ Π΅ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ» .ZIP, Π° Π·Π°Ρ‚Π΅ΠΌ ΡƒΠ΄Π°Π»ΠΈΠΌ Π½ΠΎΠ²ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ. УстановитС это ΠΊΠ°ΠΊ Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ для запуска ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π² мСсяц. Π’Ρ‹ сэкономитС Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ мСста ΠΈ сохранитС ΠΏΠ°ΠΏΠΊΡƒ Β«Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹Β» Π² чистотС.

Пока ΠΈ Π”Π΅Π»Π°ΠΉ Пока: Π¦ΠΈΠΊΠ»Ρ‹ ΠΏΡ€ΠΈ условии

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ» Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ соблюдСнии ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ условия, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ†ΠΈΠΊΠ» While. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ для отслСТивания счСта, сначала установитС Π΅Π΅.

i=0
while(i

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ счСтчик, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ваш ΠΊΠΎΠ΄ запускался хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Π΄Π°ΠΆΠ΅ Ссли тСст Π²Π΅Ρ€Π΅Π½. Π­Ρ‚ΠΎ случай с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ сцСнария Π½ΠΈΠΆΠ΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² этих случаях Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» Do-While

, Бинтаксис Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ отличаСтся.

do{
Your Steps
}while(Conditional Statement)

Π˜Ρ… использованиС Π½Π΅ Ρ‚Π°ΠΊ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π΅Π³ΠΎ программиста. ДСлая Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ сцСнарии ΠΈΠ·ΠΎ дня Π² дСнь, Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ с Π½ΠΈΠΌΠΈ Ρ‚Π°ΠΊ часто. Π§Ρ‚ΠΎ ΠΈΠΌ особСнно пригодится, Ρ‚Π°ΠΊ это созданиС Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡΡ‚ΠΈ процСсса.

ΠœΡ‹ собираСмся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ быстрый сцСнарий для ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° ΠΈ оповСщСния, Ссли ΠΎΠ½ Π½Π΅ возвращаСтся Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ 15 ΠΌΠΈΠ½ΡƒΡ‚. Π’ этом сцСнарии прСдполагаСтся, Ρ‡Ρ‚ΠΎ это домашний сСрвСр ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ часто пСрСзагруТаСтся. НС ΡΡ‚Π΅ΡΠ½ΡΠΉΡ‚Π΅ΡΡŒ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ врСмя, Ссли ваш ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ загруТаСтся быстрСС.

ΠŸΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°: использованиС Ρ†ΠΈΠΊΠ»Π° Do-While

Π­Ρ‚ΠΎΡ‚ скрипт Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ Команда ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Π½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ. (ΠœΡ‹ использовали Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ IP здСсь для ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Π³ΠΎ DNS / IP вашСго ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°). Π—Π°Ρ‚Π΅ΠΌ создайтС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ счСтчика, я ΠΈ установитС Π΅Π³ΠΎ Π½Π° 0. Π”Π°Π»Π΅Π΅ Ρƒ вас Π΅ΡΡ‚ΡŒ Ρ†ΠΈΠΊΠ» Do с Start-Sleep, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ останавливаСт сцСнарий Π½Π° 300 сСкунд (ΠΏΡΡ‚ΡŒ ΠΌΠΈΠ½ΡƒΡ‚). Вторая ΠΊΠΎΠΌΠ°Π½Π΄Π° добавляСт ΠΎΠ΄ΠΈΠ½ ΠΊ счСтчику.

Restart-Computer -ComputerName 127.0.0.1
i=0
do{
Start-Sleep -Seconds 300
$i += 1
}while((!(Test-Connection 127.0.0.1 -Quiet)) -or $i -gt 3)
if($i -gt 3){
Write-Ouput "Remote Machine not responding, please check."
}
else{
Write-Output "Reboot Succeeded"
}

Π’ΠΎΠ³Π΄Π° Ρƒ нас Π΅ΡΡ‚ΡŒ наши ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΈ. ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ тСст Or, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ сбой Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅. ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ являСтся скрипт, бСсконСчно Π·Π°Ρ†ΠΈΠΊΠ»ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉΡΡ Π½Π° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΌΠ°ΡˆΠΈΠ½Ρƒ, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ВСст-соСдинСниС ΠšΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚. Для простоты это Ping для PowerShell. ДобавляСм ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -Π’ΠΈΡ…ΠΎ Ρ‡Ρ‚ΠΎ заставляСт Π΅Π³ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ True ΠΈΠ»ΠΈ False, Π° Π½Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². Вторая Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Or провСряСт, большС Π»ΠΈ счСтчик, Ρ‡Π΅ΠΌ Ρ‚Ρ€ΠΈ.

ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ†ΠΈΠΊΠ»Π° ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ наш счСтчик. Π­Ρ‚ΠΎ быстрый ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ if / else. Если ΠΎΠ½ΠΎ большС Ρ‚Ρ€Π΅Ρ…, скрипт Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚, Ρ‡Ρ‚ΠΎ удалСнная машина Π½Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚. Если это Π½Π΅ Ρ‚Π°ΠΊ, выводится, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΏΡ€ΠΎΡˆΠ»Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ.

Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ΅Ρ‚Π»ΠΈ

Π’ PowerShell доступны Π΄Π²Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠ° Ρ†ΠΈΠΊΠ»ΠΎΠ². Они Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ стСпСни связаны с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌΠΈ двумя Ρ†ΠΈΠΊΠ»Π°ΠΌΠΈ, ΠΎΠ½ΠΈ просто Π½Π΅ Ρ‚Π°ΠΊ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ. Π¦ΠΈΠΊΠ» For Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ While. Π’Ρ‹ устанавливаСтС всС свои ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΈ Π² ΠΎΡ†Π΅Π½ΠΊΠ΅, Π° Π·Π°Ρ‚Π΅ΠΌ устанавливаСтС свои ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Ρ‹.

for($i = 0;$i -lt 10;$i++){
Your Steps
}

Π¦ΠΈΠΊΠ»Ρ‹ Β«Π”ΠΎΒ» ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° Ρ†ΠΈΠΊΠ»Ρ‹ Β«Π”ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€Β», Π²Ρ‹ просто измСняСтС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ «Пока» Π½Π° Β«Π”ΠΎΒ». Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ сцСнария это Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ Π²Ρ‹Π±ΠΎΡ€ стиля, Π½ΠΎ Do While Π±ΠΎΠ»Π΅Π΅ унивСрсалСн Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… ситуациях. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ, Ссли Π²Ρ‹ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½, Β«Π”Π΅Π»Π°ΠΉ ΠΏΠΎΠΊΠ°Β» Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π΅Π½.

PowerShell Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‰ΡŒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· этих Ρ†ΠΈΠΊΠ»ΠΎΠ². Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠΌΠΎΡ‰ΡŒ, Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΠΎΠΊΠΎΠ»ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ†ΠΈΠΊΠ»Π° Π² Get-Help. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ совСты для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Π­Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Ссли Π²Ρ‹ застряли.

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ расти вмСстС с Ρ‚ΠΎΠ±ΠΎΠΉ

На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρƒ вас Π΅ΡΡ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π½Π°Π²Ρ‹ΠΊΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Π΅ сцСнарии. Π‘ΡƒΠ΄ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свою домашнюю установку

ΠΈΠ»ΠΈ экономя врСмя Π½Π° Ρ€Π°Π±ΠΎΡ‚Π΅, Ρ†ΠΈΠΊΠ»Ρ‹ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ вашим сцСнариям Π΄Π΅Π»Π°Ρ‚ΡŒ большС. ОбъСдинСниС этих Ρ†ΠΈΠΊΠ»ΠΎΠ² с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ошибок Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ваш сцСнарий Π·Π° Ρ€Π°ΠΌΠΊΠΈ

, Π­Ρ‚ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π΄Π²Π΅Ρ€ΡŒ Π² Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ языки.

Π§Ρ‚ΠΎ Π·Π° ΡƒΠΌΠ½Ρ‹ΠΉ сцСнарий PowerShell Π²Ρ‹ создали с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»ΠΎΠ²? ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ этим с Π½Π°ΠΌΠΈ Π² коммСнтариях.

ΠžΡΠ½ΠΎΠ²Ρ‹ php, ΡƒΡ€ΠΎΠΊ 6 β€” Π¦ΠΈΠΊΠ» For

Π¦ΠΈΠΊΠ» For это простой Ρ†ΠΈΠΊΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΠ΅ΠΌΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ индСкса. Π’ PHP сущСствуСт Π΄Π²Π° простых Ρ†ΠΈΠΊΠ»Π°, Ρ†ΠΈΠΊΠ» for ΠΈ Ρ†ΠΈΠΊΠ» foreach.

Π¦ΠΈΠΊΠ» For.

Π¦ΠΈΠΊΠ» for ΡƒΠ΄ΠΎΠ±Π΅Π½, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ массива ΠΈ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ элСмСнту массива Ρ‡Π΅Ρ€Π΅Π· измСняСмый индСкс. НапримСр, Ρƒ нас имССтся список Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… чисСл. Для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΡ… Π½Π° экран Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΈΠ· Π½ΠΈΡ… ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½ΠΎ. Код, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ пишСм Π² Ρ†ΠΈΠΊΠ»Π΅ for, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ индСкс i, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ измСняСтся Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ (ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠ΅, ΠΏΡ€ΠΎΡ…ΠΎΠ΄ Ρ†ΠΈΠΊΠ»Π°) Ρ†ΠΈΠΊΠ»Π° for.

$odd_numbers = [1,3,5,7,9];
for ($i = 0; $i 

ΠŸΠ΅Ρ€Π²Π°Ρ строка Ρ†ΠΈΠΊΠ»Π° for опрСдСляСт Ρ‚Ρ€ΠΈ части:

  • инициализация ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ($i = 0)
    β€” ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° $i ΠΈ Π·Π°Π΄Π°Ρ‘ΠΌ Π΅ΠΉ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«0Β»
  • условиС Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ†ΠΈΠΊΠ»Π° ($i — ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅ (ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ) вычисляСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π¦ΠΈΠΊΠ» остановится, ΠΊΠΎΠ³Π΄Π° выполнится условиС, — пСрСмСнная $i Π±ΡƒΠ΄Π΅Ρ‚ большС Π΄Π»ΠΈΠ½Ρ‹ массива.
  • ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ($i=$i+1)
    β€” ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅ ΠΏΠΎ Ρ†ΠΈΠΊΠ»Ρƒ пСрСмСнная $i увСличиваСтся Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ. Π•ΡΡ‚ΡŒ способ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ запись увСличСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΊΠΎΡ€ΠΎΡ‡Π΅Β β€” $i+=1 ΠΈΠ»ΠΈ $i++.

Π¦ΠΈΠΊΠ» Foreach.

Π¦ΠΈΠΊΠ» foreach выполняСт ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ элСмСнтов, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ массив ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, присваивая значСния элСмСнтов ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ.

Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ список всСх Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… чисСл ΠΎΡ‚ 1 Π΄ΠΎ 10 ΠΈ вывСсти ΠΈΡ… Π½Π° экран ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ.
Π‘ Ρ†ΠΈΠΊΠ»ΠΎΠΌ foreach, вмСсто использования ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π² качСствС индСкса массива, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ элСмСнт ΠΈΠ· массива нСпосрСдствСнно Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ $odd_number.

$odd_numbers = [1,3,5,7,9];
foreach ($odd_numbers as $odd_number) {
  echo $odd_number . "\n";
}

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π΅ массивов с ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:

$phone_numbers = [
  "Π›Π΅ΡˆΠ°" => "415-235-8573",
  "ЕвгСния" => "415-492-4856",
];

foreach ($phone_numbers as $name => $number) {
  echo "Π§Π΅Π»ΠΎΠ²Π΅Ρ‡Π΅ΠΊ $name ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π° $number.\n";
}

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅

НапСчатайтС всС Π½ΠΎΠΌΠ΅Ρ€Π° массива ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ символ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° Π½ΠΎΠ²ΡƒΡŽ строку Β«\nΒ» для раздСлСния Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: www.learn-php.org

Π¦ΠΈΠΊΠ»Ρ‹ Bash | Losst

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ наш Ρ†ΠΈΠΊΠ» ΠΏΡ€ΠΎ написаниС скриптов Π½Π° Bash. ΠœΡ‹ ΡƒΠΆΠ΅ рассмотрСли ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π°Ρ€Ρ…ΠΈΠ²Π°ΠΌΠΈ ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½ΠΎ этого Π΅Ρ‰Π΅ нСдостаточно. Π›ΡŽΠ±ΠΎΠΉ ΡƒΠ²Π°ΠΆΠ°ΡŽΡ‰ΠΈΠΉ сСбя язык программирования Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ»Ρ‹. Π¦ΠΈΠΊΠ» — это такая ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, которая позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ участок ΠΊΠΎΠ΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ количСство Ρ€Π°Π·.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»ΠΎΠ² Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‡Π΅Π½ΡŒ сильно ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ количСство строк ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ для ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ†ΠΈΠΊΠ»Ρ‹ Bash, ΠΊΠ°ΠΊ ΠΈΡ… ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ:

Π¦ΠΈΠΊΠ»Ρ‹ Bash

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

  • for — позволяСт ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ всС элСмСнты ΠΈΠ· массива ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ-счСтчик для опрСдСлСния количСства ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ;
  • while — Ρ†ΠΈΠΊΠ» выполняСтся ΠΏΠΎΠΊΠ° условиС истинно;
  • until — Ρ†ΠΈΠΊΠ» выполняСтся ΠΏΠΎΠΊΠ° условиС Π»ΠΎΠΆΠ½ΠΎ.

Π¦ΠΈΠΊΠ»Ρ‹ Bash, это ΠΎΡ‡Π΅Π½ΡŒ полСзная Π²Π΅Ρ‰ΡŒ ΠΈ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с Π½ΠΈΠΌΠΈ Π±ΡƒΠ΄Π΅Ρ‚ нСслоТно. Bash позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ»Ρ‹ ΠΊΠ°ΠΊ Π² скриптах, Ρ‚Π°ΠΊ ΠΈ нСпосрСдствСнно Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅. Π”Π°Π»ΡŒΡˆΠ΅ ΠΌΡ‹ рассмотрим ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· этих Π²ΠΈΠ΄ΠΎΠ² Ρ†ΠΈΠΊΠ»ΠΎΠ².

Π¦ΠΈΠΊΠ» for

Π¦ΠΈΠΊΠ» for bash примСняСтся ΠΎΡ‡Π΅Π½ΡŒ часто ΠΈΠ·-Π·Π° своСй спСцифики. Π•Π³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ сколько Ρ€Π°Π· Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΈΠ»ΠΈ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ просто ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ всС элСмСнты массива ΠΈ Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ количСство ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ.

Π¦ΠΈΠΊΠ» for ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько синтаксисов ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ вСсти сСбя ΠΏΠΎ Ρ€Π°Π·Π½ΠΎΠΌΡƒ. Для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° элСмСнтов списка ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ синтаксис:

for пСрСмСнная in список
do
ΠΊΠΎΠΌΠ°Π½Π΄Π°1
ΠΊΠΎΠΌΠ°Π½Π΄Π°2
done

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» for нСзависимо ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° начинаСтся с ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова for. Π”Π°Π»ΡŒΡˆΠ΅ всС зависит ΠΎΡ‚ Ρ‚ΠΈΠΏΠ°. Π’ этом случаС послС for указываСтся имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π±ΡƒΠ΄Π΅Ρ‚ сохранСн ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт списка, Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ΄Π΅Ρ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово in ΠΈ сам список. ΠšΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π² Ρ†ΠΈΠΊΠ»Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ словами do ΠΈ done.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ всС Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΈ напишСм нСбольшой скрипт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€Π° ΠΎΡ‚ 1 Π΄ΠΎ 5:

vi for1.sh

!/bin/bash
for number in 1 2 3 4 5
do
echo $number
done

Π”Π°ΠΉΡ‚Π΅ скрипту ΠΏΡ€Π°Π²Π° Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈ запуститС Π΅Π³ΠΎ:

chmod +x for1.sh
./for1.sh

Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ всС выполняСтся Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π»ΠΎΡΡŒ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Ρ†ΠΈΡ„Ρ€Ρ‹ ΠΎΡ‚ 1 Π΄ΠΎ 5, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ пСрСчислили Π² массивС. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ»Ρƒ любой массив, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

!/bin/bash

for iface in $(ls /sys/class/net/)
do
echo $iface
done

Как Π²Ρ‹ ΡƒΠΆΠ΅ поняли, этот Ρ†ΠΈΠΊΠ» Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ список всСх, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΊ систСмС сСтСвых интСрфСйсов. Но Π² Ρ†ΠΈΠΊΠ»Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΡ… Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ, Π½ΠΎ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ дСйствия.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ‚ΠΈΠΏ Ρ†ΠΈΠΊΠ»Π° for ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π² языках программирования Π‘ΠΈ ΠΈ Π‘++. Он состоит ΠΈΠ· Ρ‚Ρ€Π΅Ρ… частСй, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° счСтчика, условия продолТСния выполнСния ΠΈ дСйствия Π½Π°Π΄ счСтчиком. Π’ΠΎΡ‚ синтаксис:

for ((счСтчик=1; счСтчик < 10; счСтчик++))
do
ΠΊΠΎΠΌΠ°Π½Π΄Π°1
ΠΊΠΎΠΌΠ°Π½Π΄Π°2
done

Π­Ρ‚ΠΎΡ‚ Ρ†ΠΈΠΊΠ» Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ слоТнСС, Π½ΠΎ ΠΎΠ½ позволяСт ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ большС. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ массивы, Π½ΠΎ ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ количСство ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ. Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

!/bin/bash
for ((i=1; iΒ < 10; i++))
do
echo $i
done

Β 

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ странный, ΠΏΡ€Π°Π²Π΄Π°? ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΊΠ°ΠΊ выполняСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° условия. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика сравниваСтся с эталоном. ДСйствиС с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ счСтчиком выполняСтся сразу ΠΆΠ΅ послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ основного Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄, Π° ΡƒΠΆΠ΅ ΠΏΠΎΡ‚ΠΎΠΌ дСлаСтся сравнСниС. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρƒ нас ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ i Ρ€Π°Π²Π½ΠΎ 1, Π° послС Π½Π΅Π³ΠΎ ΡƒΠΆΠ΅ Π΄Π²Π° 2. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ дСвятого ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΎ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ ΠΈ станСт 10. УсловиС сравнСния 10 < 10 Π½Π΅ Π²Π΅Ρ€Π½ΠΎ, поэтому Ρ†ΠΈΠΊΠ» дальшС Π½Π΅ выполняСтся.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого ΠΆΠ΅ синтаксиса ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ бСсконСчныС Ρ†ΠΈΠΊΠ»Ρ‹ bash linux:

!/bin/bash
for ((;;))
do
echo "БСсконСчный Ρ†ΠΈΠΊΠ», Π½Π°ΠΆΠΌΠΈΡ‚Π΅ CTRL+C для Π²Ρ‹Ρ…ΠΎΠ΄Π°"
done

Если Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° ΠΏΡ€Π΅ΠΆΠ΄Π΅Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Но Ρ‚Π°ΠΊ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ рСкомСндуСтся. Для Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ break:

!/bin/bash
for (i=1;i<10;i++)
do
echo Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика $i
if [[ i -gt 5]]
break
fi
done

Β 

Π‘ΠΎ Ρ†ΠΈΠΊΠ»Π°ΠΌΠΈ for ΠΌΡ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΠΈ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ выглядят ΠΈ Ρ‡Ρ‚ΠΎ с Π½ΠΈΠΌΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ. Π”Π°Π»ΡŒΡˆΠ΅ ΠΌΡ‹ рассмотрим Ρ†ΠΈΠΊΠ»Ρ‹ while ΠΈ until. Они Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹.

Π¦ΠΈΠΊΠ» While

Π‘ΡƒΡ‚ΡŒ Ρ†ΠΈΠΊΠ»Π° While Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒΡΡ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ условиС, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π² объявлСнии Ρ†ΠΈΠΊΠ»Π°. Π—Π΄Π΅ΡΡŒ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… счСтчиков ΠΈ Ссли ΠΎΠ½ΠΈ Π²Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹, Ρ‚ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… Π²Π°ΠΌ придСтся самим. Bash Ρ†ΠΈΠΊΠ» while ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ синтаксис:

while [ условиС ]
do
ΠΊΠΎΠΌΠ°Π½Π΄Π°1
ΠΊΠΎΠΌΠ°Π½Π΄Π°2
ΠΊΠΎΠΌΠ°Π½Π΄Π°3
done

Π­Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ: сначала выполняСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ условия, Ссли true, выполняСтся Π½Π°Π±ΠΎΡ€ ΠΊΠΎΠΌΠ°Π½Π΄, Π·Π°Ρ‚Π΅ΠΌ снова выполняСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°, ΠΈ Ρ‚Π°ΠΊ ΠΏΠΎΠΊΠ° условиС Π½Π΅ Π²Π΅Ρ€Π½Π΅Ρ‚ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π­Ρ‚ΠΎ Π½Π°ΠΌ Ρ‚ΠΎΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

vi while.sh

!/bin/bash
x=1
while [ $x -lt 5Β ]
do
echo "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика: $x"
x=$(( $x + 1 ))
done

Β 

Β 

Π—Π΄Π΅ΡΡŒ сначала ΠΌΡ‹ устанавливаСм Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика Π² Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ, Π·Π°Ρ‚Π΅ΠΌ, Π² условии сравниваСм Π΅Π³ΠΎ с 5, ΠΏΠΎΠΊΠ° счСтчик мСньшС пяти Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΠ· Π±Π»ΠΎΠΊΠ° do-done. Но Π΅Ρ‰Π΅ Π² этом Π±Π»ΠΎΠΊΠ΅ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈ Π΄Π΅Π»Π°Π΅ΠΌ.

Π’Π°ΠΊΠΆΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ while ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ нСсколько строк ΠΈΠ· стандартного Π²Π²ΠΎΠ΄Π°:

vi while.sh

!/bin/bash
hile read line
do
echo $line
done

Β 

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ строки ΠΏΠΎΠΊΠ° Π²Ρ‹ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΡ‚Π΅ Π΅ΠΉ символ ΠΊΠΎΠ½Ρ†Π° Ρ„Π°ΠΉΠ»Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ сочСтания клавиш Ctrl+D. БСсконСчный Ρ†ΠΈΠΊΠ» while bash с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ while Π΅Ρ‰Π΅ ΠΏΡ€ΠΎΡ‰Π΅ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ:

vi while.sh

while :
do
echo "БСсконСчный Ρ†ΠΈΠΊΠ» bash, для Π²Ρ‹Ρ…ΠΎΠ΄Π° Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Ctrl+C"
done

Π¦ΠΈΠΊΠ» until

Нам ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ послСдний Ρ†ΠΈΠΊΠ». Π­Ρ‚ΠΎ Ρ†ΠΈΠΊΠ» until. Он ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° while ΠΈ отличаСтся ΠΎΡ‚ Π½Π΅Π³ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ условия. Если Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ условиС всСгда Π±Ρ‹Π»ΠΎ истинным, Ρ‚ΠΎ здСсь всС Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. Π¦ΠΈΠΊΠ» Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠΎΠΊΠ° условиС Π½Π΅Π²Π΅Ρ€Π½ΠΎ. Бинтаксис:

until [ условиС ]
do
ΠΊΠΎΠΌΠ°Π½Π΄Π°1
ΠΊΠΎΠΌΠ°Π½Π΄Π°2
done

Π”ΡƒΠΌΠ°ΡŽ послС рассмотрСния Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° со счСтчиком Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ понятнСС ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚:

!/bin/bash
count=1
until [ $count -gt 10 ]
do
echo "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика: $count"
count=$(( $count + 1 ))
done

ΠœΡ‹ Π·Π°Π΄Π°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика 1 ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ Π΅Π³ΠΎ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ условиС счСтчик большС 10 выполнится, сразу Ρ†ΠΈΠΊΠ» Π±ΡƒΠ΄Π΅Ρ‚ остановлСн. Π’ Ρ†ΠΈΠΊΠ»Π°Ρ… while ΠΈ until Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ break ΠΈ continue для Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π°, Π½ΠΎ ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ это ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ.

Π’Ρ‹Π²ΠΎΠ΄Ρ‹

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрСли Ρ†ΠΈΠΊΠ»Ρ‹ Bash, ΠΊΠ°ΠΊ с Π½ΠΈΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ Π² ΠΊΠ°ΠΊΠΈΡ… ситуациях ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π¦ΠΈΠΊΠ»Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΈ Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌΡ‹ΠΌ инструмСнтом ΠΏΡ€ΠΈ создании слоТных скриптов администрирования систСмы. Если Ρƒ вас ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ вопросы, ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°ΠΉΡ‚Π΅ Π² коммСнтариях!

3 Π³Π»Π°Π²Π½Ρ‹Π΅ ошибки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ врСдят ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ JavaScript

Рассмотрим 3 Π³Π»Π°Π²Π½Ρ‹Π΅ ошибки, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ спад ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ JavaScript ΠΊΠΎΠ΄Π°, тСстируСм ΠΈ избавляСмся ΠΎΡ‚ «Π²Ρ€Π΅Π΄Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π΅ΠΊ».

Π§Ρ‚ΠΎ Ссли ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ECMAScript, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ‚Π°ΠΊ ΠΊΡ€ΠΎΠΏΠΎΡ‚Π»ΠΈΠ²ΠΎ ΠΈΠ·ΡƒΡ‡Π°Π»ΠΈ, – Π½Π΅ Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ опасная Π»ΠΎΠ²ΡƒΡˆΠΊΠ° для сниТСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ JavaScript, красиво упакованная Π² однострочный Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²?

Π­Ρ‚Π° история Π½Π°Ρ‡Π°Π»Π°ΡΡŒ с Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ ES5 ΠΈ Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ массивов (forEach, reduce, map, filter ΠΈ Ρ‚. Π΄.). Π‘ этими функциями возрастала Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ языка. А написаниС ΠΊΠΎΠ΄Π° ΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»ΠΎΡΡŒ Π±ΠΎΠ»Π΅Π΅ слаТСнным ΠΈ интСрСсным. Π”Π° ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ выглядСл ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ понятнСС.

Π’ΠΎΠ³Π΄Π° ΠΆΠ΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Ρ€Π°Π·Π²ΠΈΠ²Π°Π»Π°ΡΡŒ ΠΈ другая срСда – Node.js. Она Π² ΠΊΠΎΡ€Π½Π΅ пСрСсматривала всю ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ full-stack Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π»Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΠ»Π°Π²Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΎΡ‚ front-end ΠΊ back-end.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Node.js с послСдним ECMAScript Π² V8 пытаСтся Π²Ρ‹Π±ΠΈΡ‚ΡŒΡΡ Π² Π»ΠΈΠ΄Π΅Ρ€Ρ‹ Π³Π»Π°Π²Π½Ρ‹Ρ… сСрвСрных языков программирования. А для этого ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ высокой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ мноТСство Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². И Π΄Π°, ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ языка Π΅Ρ‰Π΅ Π½Π΅ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π»ΠΈ.

Π’Π°ΠΊ всС ΠΆΠ΅, JavaScript с Π΅Π³ΠΎ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΠΌΠΈ – это польза ΠΈΠ»ΠΈ Π²Ρ€Π΅Π΄ для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ?

Π‘ ростом мощности ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² ΠΈ ускорСниСм сСти клиСнтская Ρ‡Π°ΡΡ‚ΡŒ JavaScript становится ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для прСдставлСния/просмотра. Но ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒΡΡ Π½Π° JavaScript ΠΏΡ€ΠΈ написании Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ со слоТной Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ?

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° этот вопрос, ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ тСстирования Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ (Π·Π°Ρ†ΠΈΠΊΠ»ΠΈΠ²Π°Π½ΠΈΠ΅, Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ массива ΠΈ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²). ВсС тСсты ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ Π½Π° macOS Π² Node.js v10.11.0 ΠΈ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ Chrome.

1. Π—Π°Ρ†ΠΈΠΊΠ»ΠΈΠ²Π°Π½ΠΈΠ΅ массива

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π½Π° ΡƒΠΌ, – это Π½Π°ΠΉΡ‚ΠΈ сумму массива с 10 тыс. элСмСнтами. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ взят ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΡ€ΠΎΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ значСния, Π½Π΅ создавая лишнСго запроса ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….
ΠŸΡ€ΠΈ суммировании случайных 10 тыс. элСмСнтов Ρ‡Π΅Ρ€Π΅Π· ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ for, for-of, while, forEach ΠΈ reduce 10 тыс. Ρ€Π°Π·. ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ значСния Π½ΠΈΠΆΠ΅:

For Loop, срСднСС врСмя Ρ†ΠΈΠΊΠ»Π°: ~10 микросСкунд
For-Of, срСднСС врСмя Ρ†ΠΈΠΊΠ»Π°: ~110 микросСкунд
ForEach, срСднСС врСмя Ρ†ΠΈΠΊΠ»Π°: ~77 микросСкунд
While, срСднСС врСмя Ρ†ΠΈΠΊΠ»Π°: ~11 микросСкунд
Reduce, срСднСС врСмя Ρ†ΠΈΠΊΠ»Π°: ~113 микросСкунд

Если ΠΏΠΎΠ³ΡƒΠ³Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массивы, Ρ‚ΠΎ самым популярным совСтом Π±ΡƒΠ΄Π΅Ρ‚ использованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° reduce. Однако Π΄Π°Π½Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ являСтся ΠΊΡ€Π°ΠΉΠ½Π΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌΠΈ. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ Ρ‡Π΅Ρ€Π΅Π· forEach Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ ΡƒΠ²Π΅Π½Ρ‡Π°Π»ΠΈΡΡŒ успСхом. Π”Π°ΠΆΠ΅ Π² новСйшСм for-of (ES6) Ρ…Ρ€ΠΎΠΌΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

Оказалось, Ρ‡Ρ‚ΠΎ Π»ΠΈΠ΄Π΅Ρ€Π°ΠΌΠΈ ΠΏΠΎ части ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ (Π² 10 Ρ€Π°Π· быстрСС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ…!) стали ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ while ΠΈ for.

Как ΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ новСйшСС ΠΈ Ρ€Π°Π·Ρ€Π΅ΠΊΠ»Π°ΠΌΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ сильно Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΡ‚ JavaScript? Π”Π΅Π»ΠΎ Ρ‚ΡƒΡ‚ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ: reduce ΠΈ forEach Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°. Данная функция вызываСтся рСкурсивно ΠΈ заполняСт стэк. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‚ΠΎΡ€ΠΌΠΎΠΆΠ΅Π½ΠΈΠ΅ обусловлСно ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ исполняСмого ΠΊΠΎΠ΄Π° (см. Ρ‚ΡƒΡ‚).

2. Π”ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ массива

Π’Ρ€ΠΎΠ΄Π΅ Π±Ρ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ интСрСсного Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡƒΠ½ΠΊΡ‚Π΅ Π½Π΅Ρ‚. Но это основа нСизмСняСмых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π±Π΅Π· измСнСния Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

ΠŸΡ€ΠΈ тСстировании ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ получаСтся интСрСсный Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ 10 тыс. массивов ΠΈΠ· 10 тыс. случайных элСмСнтов Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ классичСскими способами. Новомодная опСрация spread ΠΈΠ· […arr], Array ΠΈΠ· Array.from(arr) Π² ES6 ΠΈ map arr.map(x => x) ΠΈΠ· ES5 ΠΏΠΎΠ·ΠΎΡ€Π½ΠΎ ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹Π²Π°Π»ΠΈ «ΡΡ‚Π°Ρ€ΠΈΡ‡ΠΊΠ°ΠΌ» slice arr.slice() ΠΈ concatenate [].concat(arr).

Π”ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· Slice, срСднСС врСмя: ~367 микросСкунд
Π”ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· Map, срСднСС врСмя: ~469 микросСкунд
Π”ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· Spread, срСднСС врСмя: ~512 микросСкунд
Π”ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· Conct, срСднСС врСмя: ~366 микросСкунд
Π”ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· Array From, срСднСС врСмя: ~1,436 микросСкунд
Π”ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, срСднСС врСмя: ~412 микросСкунд

3. ΠŸΠ΅Ρ€Π΅Π±ΠΎΡ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° популярная Ρ‚Π΅ΠΌΠ° – ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ (итСрация) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Он Π½ΡƒΠΆΠ΅Π½ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π΅ элСмСнтов JSON Π±Π΅Π· поиска ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ значСния ΠΊΠ»ΡŽΡ‡Π°. Π—Π΄Π΅ΡΡŒ Ρ‚ΠΎΠΆΠ΅ Π΅ΡΡ‚ΡŒ свои ΠΏΠΎΡ‡Π΅Ρ‚Π½Ρ‹Π΅ Π²Π΅Ρ‚Π΅Ρ€Π°Π½Ρ‹ – for-in for(let key in obj) ΠΈΠ»ΠΈ Object.keys(obj) (Π² ES6). Π‘Ρ‚ΠΎΠΈΡ‚ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΈ Object.entries(obj) (Π² ES8), Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠ»ΡŽΡ‡ΠΈ ΠΈ значСния.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ тСстирования 10 тыс. ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ· 1 тыс. случайных ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ:

Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‡Π΅Ρ€Π΅Π· For-In, срСднСС врСмя: ~240 микросСкунд
Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, срСднСС врСмя: ~294 микросСкунд
Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‡Π΅Ρ€Π΅Π· For-Of, срСднСС врСмя: ~535 микросСкунд

Π’ ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π΄Π²ΡƒΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ… вмСсто прямого ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π±Π΅Π· ΠΊΠ»ΡŽΡ‡Π΅ΠΉ создаСтся пСрСчислимый массив Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. ПослСдний Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ вСсьма ΡΠΎΠΌΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Если для прилоТСния Π²Π°ΠΆΠ½Π° высокая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΈΠ»ΠΈ сСрвСры ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с сущСствСнной Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ, Ρ‚ΠΎ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΠΏΡ€ΠΎ всС популярныС/Π»Π΅Π³ΠΊΠΎ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹Π΅/чистыС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. Они приводят ΠΊ спаду ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈΒ JavaScript ΠΊΠΎΠ΄Π° Π² 10 Ρ€Π°Π·!

ΠŸΡ€Π΅ΠΊΡ€Π°Ρ‰Π°ΠΉΡ‚Π΅ Π±Π΅Π·Π΄ΡƒΠΌΠ½ΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ популярным Ρ‚Ρ€Π΅Π½Π΄Π°ΠΌ. ΠŸΠΎΠ΄Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π² соотвСтствии с собствСнными цСлями. Для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ идСально ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ Π»Π΅Π³ΠΊΠΈΠΉ ΠΈ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄. Для высоконагруТСнных сСрвСров ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с объСмной клиСнтской Ρ‡Π°ΡΡ‚ΡŒΡŽ Π²Ρ‹Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ΅.

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΡΡ‚Π°Ρ‚ΡŒΠΈ Yotam Kadishay:Β 3 JavaScript Performance Mistakes You Should Stop Doing

Как ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ массивы Π² PHP

PHP прСдоставляСт нСсколько способов ΠΎΠ±Ρ…ΠΎΠ΄Π° массивов с использованиСм ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ массива, Ρ‚Π°ΠΊ ΠΈ языковых конструкций: array_walk , array_map , array_filter , foreach , list / ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈ для Ρ†ΠΈΠΊΠ»ΠΎΠ². ΠœΡ‹ дСмонстрируСм ΠΈ описываСм foreach ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ конструкции Ρ†ΠΈΠΊΠ»Π° Π½Π° этой страницС. ΠœΡ‹ рассмотрим ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ страницС.

foreach

Π¦ΠΈΠΊΠ» PHP foreach обСспСчиваСт ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ способ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° массивов.Π•ΡΡ‚ΡŒ Π΄Π²Π΅ Ρ„ΠΎΡ€ΠΌΡ‹: ΠΎΠ΄Π½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠ»ΡŽΡ‡ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи массива, Π° другая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ дСмонстрируСм Ρ„ΠΎΡ€ΠΌΡƒ key => value :

  $ pets = ['ΠœΠΎΡ€ΠΈ', 'Мики', 'ΠžΡ€Π΅ΠΎΠ»', 'lab' => 'Π’ΠΈΠ½Π½ΠΈ'];

foreach ($ pets as $ key => $ val) {
    echo "$ key => $ val \ n";
}
 
 

Π’ Ρ‚Π΅Π»Π΅ Ρ†ΠΈΠΊΠ»Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ echo для отобраТСния ΠΊΠ»ΡŽΡ‡Π° ΠΈ значСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта массива ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ.

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ foreach ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнтов массива:

  $ pets = ['ΠœΠΎΡ€ΠΈ', 'Мики', 'ΠžΡ€Π΅ΠΎΠ»', 'lab' => 'Π’ΠΈΠ½Π½ΠΈ'];
foreach ($ pets as $ val) {
    echo "$ val \ n";
}
 
 

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ foreach ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для измСнСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ массива, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΎΠ½Π° ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π·Π½Π°ΠΊΠ° ссылки ( ΠΈ ):

  $ ar = [1, 2, 3, 4];

foreach ($ ar as & $ value) {
    $ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ * = 2;
}

print_r ($ ar);

Π½Π΅ Π·Π°Π΄Π°Π½ΠΎ ($ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅); 
 

лист / ΠΏΠΎ

Π”Ρ€ΡƒΠ³ΠΎΠΉ распространСнный способ ΠΎΠ±Ρ…ΠΎΠ΄Π° массивов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ†ΠΈΠΊΠ» ΠΈ с языковой конструкциСй list ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ .Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ достигаСтся Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ , ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅:

  $ pets = ['ΠœΠΎΡ€ΠΈ', 'Мики', 'ΠžΡ€Π΅ΠΎΠ»', 'lab' => 'Π’ΠΈΠ½Π½ΠΈ'];

ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ ($ pets);
while (list ($ key, $ val) = each ($ pets)) {
    echo "$ key => $ val \ n";
}
 
 

ΠŸΡ€ΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ массиву функция , каТдая ΠΈΠ· ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΠ°Ρ€Ρ‹ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ пСрСмСщСния указатСля Π½Π° массив. Бписок Ѐункция ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для присвоСния ΠΊΠ»ΡŽΡ‡Π° ΠΈ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ.Π¦ΠΈΠΊΠ» ΠΈ заканчиваСтся, ΠΊΠΎΠ³Π΄Π° достигаСтся послСдний элСмСнт Π² массивС. Ѐункция reset вызываСтся для восстановлСния указатСля массива Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт Π² массивС.

Бписок / КаТдая конструкция ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ, Ρ‚Π°ΠΊ ΠΈ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, ΠΈΠ»ΠΈ просто со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΄Π°Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ foreach , ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅:

  $ pets = ['ΠœΠΎΡ€ΠΈ', 'Мики', 'ΠžΡ€Π΅ΠΎΠ»', 'lab' => 'Π’ΠΈΠ½Π½ΠΈ'];

ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ ($ pets);
while (list (, $ val) = each ($ pets)) {
    echo "$ val \ n";
}
 
 

для

Π¦ΠΈΠΊΠ» for ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° массивов с числовой индСксациСй, ΠΊΠ°ΠΊ ΠΌΡ‹ дСмонстрируСм здСсь:

  $ ar = ['Π ΡƒΠ΄ΠΈ', 'ΠœΠΎΡ€ΠΈ', 'ΠžΡ€Π΅ΠΎΠ»', 'Мики'];

for ($ i = 0, $ len = count ($ ar); $ i <$ len; $ i ++) {
    echo "$ ar [$ i] \ n";
}
 
 

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ echo для отобраТСния Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ значСния Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π°.Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» для для измСнСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

  $ ar = [1, 2, 3, 4];

for ($ i = 0, $ len = count ($ ar); $ i <$ len; $ i ++) {
    $ ar [$ i] * = 2;
}
print_r ($ ar);
 
 

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ массива PHP

Π£Π·Π½Π°ΠΉΡ‚Π΅ большС ΠΎΠ± ΠΎΠ±Ρ…ΠΎΠ΄Π΅ массивов Π² PHP с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ взаимодСйствия: array_walk , array_map ΠΈ array_filter .

НавСрх

PHP foreach

РСзюмС : Π² этом руководствС Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ PHP foreach для цикличСского ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° элСмСнтов массива.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ PHP foreach

PHP прСдоставляСт Π²Π°ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ foreach , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΏΠΎ элСмСнтам массива, Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ индСксированный массив ΠΈΠ»ΠΈ ассоциативный массив.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ foreach выполняСт ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΏΠΎ всСм элСмСнтам массива ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ. Он начинаСтся с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта ΠΈ заканчиваСтся послСдним. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Ρ€Π°Π½Π΅Π΅ Π·Π½Π°Ρ‚ΡŒ количСство элСмСнтов Π² массивС.

На ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π±Π»ΠΎΠΊ-схСмС ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ foreach :

PHP foreach с индСксированными массивами

Для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° всСх элСмСнтов индСксированного массива ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:

 

Π―Π·Ρ‹ΠΊ ΠΊΠΎΠ΄Π°: HTML, XML (xml)

Когда PHP встрСчаСт ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ foreach , ΠΎΠ½ присваиваСт ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт массива ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π·Π° , ΠΊΠ°ΠΊ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово ( $ element ).

На ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ PHP присваиваСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт массива ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $ element . Если PHP достигаСт послСднСго элСмСнта, Ρ†ΠΈΠΊΠ» Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ foreach ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для отобраТСния элСмСнтов массива $ colors :

 

'; }

Π―Π·Ρ‹ΠΊ ΠΊΠΎΠ΄Π°: HTML, XML (xml)

Π’Ρ‹Π²ΠΎΠ΄:

 

красный Π·Π΅Π»Π΅Π½Ρ‹ΠΉ синий

Π―Π·Ρ‹ΠΊ ΠΊΠΎΠ΄Π°: ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ тСкст (plaintext)

PHP foreach с ассоциативным массивом

Для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° элСмСнтов ассоциативного массива ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:

 

$ value) { }

Π―Π·Ρ‹ΠΊ ΠΊΠΎΠ΄Π°: HTML, XML (xml)

Когда PHP встрСчаСт ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ foreach , ΠΎΠ½ обращаСтся ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ элСмСнту ΠΈ Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚:

  • ΠšΠ»ΡŽΡ‡ элСмСнта ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $ key .
  • Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $ value .

На ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ PHP Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠ»ΡŽΡ‡ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ элСмСнта ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ( $ ΠΊΠ»ΡŽΡ‡ ΠΈ $ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слСдуСт Π·Π° ΠΊΠ°ΠΊ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово . Если достигнут послСдний элСмСнт, PHP Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ†ΠΈΠΊΠ».

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ foreach для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° элСмСнтов массива captials :

 

'Π’ΠΎΠΊΠΈΠΎ', 'France' => 'ΠŸΠ°Ρ€ΠΈΠΆ', 'ГСрмания' => 'Π‘Π΅Ρ€Π»ΠΈΠ½', 'United Kingdom' => 'Π›ΠΎΠ½Π΄ΠΎΠ½', 'United States' => 'Π’Π°ΡˆΠΈΠ½Π³Ρ‚ΠΎΠ½ Π”.Π‘. ' ]; foreach ($ capitals as $ country => $ capital) { echo "Π‘Ρ‚ΠΎΠ»ΠΈΡ†Π° {$ country} - $ capital". '
'; }

Π―Π·Ρ‹ΠΊ ΠΊΠΎΠ΄Π°: HTML, XML (xml)

Π’Ρ‹Π²ΠΎΠ΄:

 

Π‘Ρ‚ΠΎΠ»ΠΈΡ†Π° Π―ΠΏΠΎΠ½ΠΈΠΈ - Π’ΠΎΠΊΠΈΠΎ. Π‘Ρ‚ΠΎΠ»ΠΈΡ†Π° Π€Ρ€Π°Π½Ρ†ΠΈΠΈ - ΠŸΠ°Ρ€ΠΈΠΆ. Π‘Ρ‚ΠΎΠ»ΠΈΡ†Π° Π“Π΅Ρ€ΠΌΠ°Π½ΠΈΠΈ - Π‘Π΅Ρ€Π»ΠΈΠ½. Π‘Ρ‚ΠΎΠ»ΠΈΡ†Π° Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΠΎΠ³ΠΎ ΠšΠΎΡ€ΠΎΠ»Π΅Π²ΡΡ‚Π²Π° - Π›ΠΎΠ½Π΄ΠΎΠ½. Π‘Ρ‚ΠΎΠ»ΠΈΡ†Π° БША - Π’Π°ΡˆΠΈΠ½Π³Ρ‚ΠΎΠ½, ΠΎΠΊΡ€ΡƒΠ³ ΠšΠΎΠ»ΡƒΠΌΠ±ΠΈΡ

Π―Π·Ρ‹ΠΊ ΠΊΠΎΠ΄Π°: ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ тСкст (ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ тСкст)

Π‘Π²ΠΎΠ΄ΠΊΠ°

  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ foreach ($ array_name ΠΊΠ°ΠΊ $ element) для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° элСмСнтов индСксированного массива
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ foreach ($ array_name as $ key => $ value) для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° элСмСнтов ассоциативного массива.

Π’Ρ‹ нашли это руководство ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ?

PHP 7.x - P32: Ρ†ΠΈΠΊΠ» ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» for для итСрации… | Π°Π²Ρ‚ΠΎΡ€: Dino Cajic

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» for для ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ массиву, Π½ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΈΡΡ‚ΡŒ, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» foreach . Π¦ΠΈΠΊΠ» foreach ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис.

 foreach ($ array as $ key => $ value) 

Π’Ρ‹ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ структуру ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  • Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ массива ΠΊΠ°ΠΊ ΠΊΠ»ΡŽΡ‡ / значСниС… ΠΈΠ»ΠΈ
  • Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°Ρ€Ρ‹ ΠΊΠ»ΡŽΡ‡ / Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ массива.

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ†ΠΈΠΊΠ» foreach Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт массива, ΠΈ Ρƒ вас Π±ΡƒΠ΄Π΅Ρ‚ доступ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°Ρ€Π΅ ΠΊΠ»ΡŽΡ‡ / Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта. Π­Ρ‚ΠΎ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ссли Π²Ρ‹ ΠΈΠΌΠ΅Π΅Ρ‚Π΅ Π΄Π΅Π»ΠΎ с ассоциативными массивами. Если ΠΊΠ»ΡŽΡ‡ являСтся строкой, Π²Ρ‹ Π½Π΅ смоТСтС ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ элСмСнту с числовым индСксом.

Иногда Π½ΡƒΠΆΠ½ΠΎ Π΅Ρ‰Π΅ ΠΈ ΠΊΠ»ΡŽΡ‡ вывСсти. НапримСр, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚Π΅ список Π΄Π΅Π» Π²Π½ΡƒΡ‚Ρ€ΠΈ ассоциативного массива, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ - это дСнь Π½Π΅Π΄Π΅Π»ΠΈ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ потрСбуСтся ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.Если Π²Ρ‹ этого Π½Π΅ сдСлаСтС, структура инструкции foreach ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сокращСна.

 foreach ($ array as $ value) 

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ Π²Ρ‹ΡˆΠ΅ структура прСдоставит Π²Π°ΠΌ доступ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ элСмСнта. Π£ вас ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π΅ΡΡ‚ΡŒ прСимущСство ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° массива, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ Π»ΠΈΠ±ΠΎ нСчисловыС ΠΊΠ»ΡŽΡ‡ΠΈ, Π»ΠΈΠ±ΠΎ числовыС, Π½ΠΎ Π½Π΅ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ†ΠΈΠΊΠ»Π° foreach , ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ массив, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ числовыС индСксы.

ΠœΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» для , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ Ρ‡Π΅Ρ€Π΅Π· массив, ΠΈΠ»ΠΈ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΏΠΎΠΉΡ‚ΠΈ с Ρ†ΠΈΠΊΠ»ΠΎΠΌ foreach .

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, с Ρ†ΠΈΠΊΠ»ΠΎΠΌ foreach синтаксис Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅. Нам Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ count () , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ количСство элСмСнтов Π²Π½ΡƒΡ‚Ρ€ΠΈ массива. Нам Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ счСтчика ( $ i ), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ, Π² ΠΊΠ°ΠΊΠΎΠΌ индСксС ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ. PHP Π΄Π΅Π»Π°Π΅Ρ‚ всС это Π·Π° нас, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ†ΠΈΠΊΠ» foreach .

Рассматривая ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, PHP:

  1. ВстрСчаСт ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ foreach .Он Π·Π½Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ массив.
  2. Бинтаксис Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° foreach Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ доступ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ элСмСнта массива.
  3. Π’ΠΎ врСмя ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ PHP ΠΈΠΌΠ΅Π΅Ρ‚ доступ ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ элСмСнту. Когда выполняСтся инструкция echo , пСрСмСнная $ value ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт Π²Π½ΡƒΡ‚Ρ€ΠΈ массива. Π˜Ρ‚Π°ΠΊ, PHP ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Β«ΠΊΠΎΠ³Ρ‚ΠΈ мясорубки».
  4. PHP достигаСт ΠΊΠΎΠ½Ρ†Π° Ρ‚Π΅Π»Π° Ρ†ΠΈΠΊΠ»Π° ΠΈ повторяСт процСсс Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π² массивС Π½Π΅ останСтся элСмСнтов.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° foreach Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ ΠΎ Ρ‚ΠΎΠΌ, Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ΅ Π²Π°ΠΌΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ индСкса Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹. PHP Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ это Π·Π° вас.

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ $ key ΠΈ $ value Π²Π½ΡƒΡ‚Ρ€ΠΈ структуры Ρ†ΠΈΠΊΠ»Π° foreach Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ / Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ , Π° Π½Π΅ . Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… ΠΊΠ°ΠΊ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅. НапримСр, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ ряд Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΉ. ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ элСмСнт $ value , ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π½Π°Π·Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ $ car ΠΈ Ρ‡Π΅Ρ‚ΠΊΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ прСдставляСт.

Π­Ρ‚ΠΎ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅Π³Ρ‡Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Π΅ΠΌ Ссли Π±Ρ‹ ΠΌΡ‹ использовали для Ρ†ΠΈΠΊΠ»Π° ΠΈΠ»ΠΈ Ссли Π±Ρ‹ ΠΌΡ‹ просто сказали $ value вмСсто $ car .

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ списка Π΄Π΅Π», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ упоминался Ρ€Π°Π½Π΅Π΅. На этот Ρ€Π°Π· Π½Π°ΠΌ понадобится доступ ΠΊΠ°ΠΊ ΠΊ ΠΊΠ»ΡŽΡ‡Ρƒ, Ρ‚Π°ΠΊ ΠΈ ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°Π·Π²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρƒ ΠΊΠ»ΡŽΡ‡ / Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ $ ΠΊΠ»ΡŽΡ‡ / $ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ нашС имя. Π’ ΠΊΠ»ΡŽΡ‡Π΅ хранится дСнь Π½Π΅Π΄Π΅Π»ΠΈ, Π° Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ - Π·Π°Π΄Π°Ρ‡Π°. НазовСм ΠΊΠ»ΡŽΡ‡ $ day_in_week , Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ $ to_do_item .

Когда ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ массив $ to_do_list , Ρƒ нас Π΅ΡΡ‚ΡŒ доступ ΠΊΠ°ΠΊ ΠΊ ΠΊΠ»ΡŽΡ‡Ρƒ, Ρ‚Π°ΠΊ ΠΈ ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ. PHP ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ содСрТимоС ΠΊΠ»ΡŽΡ‡Π°, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт содСрТимоС значСния для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта Π² массивС. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ структура foreach Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ использовали ΠΊΠ°ΠΊ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово ΠΈ стрСлку (=>) Π²Π½ΡƒΡ‚Ρ€ΠΈ инструкции foreach , Ссли Π²Ρ‹ ΠΎΠ±Ρ€Π°Ρ‰Π°Π΅Ρ‚Π΅ΡΡŒ ΠΊ ΠΏΠ°Ρ€Π°ΠΌ ΠΊΠ»ΡŽΡ‡ / Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

PHP сквозной массив - Copahost

Π’ PHP Π΅ΡΡ‚ΡŒ нСсколько ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для просмотра ΠΎΠ΄Π½ΠΎΠ³ΠΎ массива.Π­Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ foreach, while ΠΈ for. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π½Π° цикличСском массивС PHP с использованиСм ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π’ этих ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Π² сцСнарии PHP Π±ΡƒΠ΄Π΅Ρ‚ Ρ†ΠΈΠΊΠ», ΠΈ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ‡Π»Π΅Π½Π΅ массива сцСнарий PHP ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ВмСсто этого для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ элСмСнта массива ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ.

PHP Π¦ΠΈΠΊΠ» ΠΏΠΎ массиву с использованиСм foreach ()

Ѐункция foreach - ΠΎΠ΄Π½Π° ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… для Ρ†ΠΈΠΊΠ»ΠΎΠ² Π² PHP. Как сказано Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ: «Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎΒ» Ρ‡Π»Π΅Π½Π° выполняйтС Ρ‚Π°ΠΊΠΈΠ΅ задания.

 ";
}

?> 

Π¦ΠΈΠΊΠ» Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив Π² PHP

Команда foreach Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для просмотра ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов Π² PHP. Π•Π³ΠΎ использованиС Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ структуры массива.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

  $ value)
{
    echo "
Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: $ key1 Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: $ value
"; // Если это массив, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π΅Ρ‰Π΅ Ρ€Π°Π· заглянСм Π² Π½Π΅Π³ΠΎ Ссли (is_array ($ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅)) { foreach (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ $ ΠΊΠ°ΠΊ $ key2) { echo "---- $ key2
"; } } // Ссли это простая строка (Π½Π΅ массив), Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌ Π΅Π΅ Π΅Ρ‰Π΅ { echo "---- $ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅"; } } ?>

Π˜Ρ‚Π°ΠΊ, Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅:

 Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: 1 Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: массив
---- Π”ΠΆΠΎΠ½
---- + 1888 9567834

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: 2 Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: массив
---- Π”ΠΎΡƒ
---- +44 32 5600 673

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: 3 Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: массив
---- Π ΠΎΠ±Π΅Ρ€Ρ‚
---- +1 45 5634 0843

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: 4 Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: ΠœΠ°Ρ€ΠΈΡ
---- ΠœΠ°Ρ€ΠΈΡ 

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ $ value Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ массива Π±Ρ‹Π»ΠΎ пСрСнСсСно ΠΊΠ°ΠΊ Π½ΠΎΠ²Ρ‹ΠΉ массив.Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ foreach для этого Π½ΠΎΠ²ΠΎΠ³ΠΎ массива, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ содСрТимоС. ΠœΡ‹ использовали PHP-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ is_array (), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ это простой строкой ΠΈΠ»ΠΈ массивом.

Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ foreach () ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ здСсь.

Π¦ΠΈΠΊΠ» while Π² PHP

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ†ΠΈΠΊΠ» while?

Π¦ΠΈΠΊΠ» PHP while ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для выполнСния Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π° Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π΄Π°Π½Π½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² while Π½Π΅ станСт Π»ΠΎΠΆΠ½Ρ‹ΠΌ.

Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ Ρ‚ΠΈΠΏ Ρ†ΠΈΠΊΠ»Π° Π² PHP, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ язык C.

УсловиС ΠΈΠ»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ выраТСния провСряСтся Π² Π½Π°Ρ‡Π°Π»Π΅ Ρ†ΠΈΠΊΠ»Π° while.

Π‘ΠΌ. Π’Π°ΠΊΠΆΠ΅: Ρ†ΠΈΠΊΠ» for

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Ρ†ΠΈΠΊΠ»Π° while

НиТС приводится общая структура использования Ρ†ΠΈΠΊΠ»Π° while Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… PHP:

while (условиС / Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅) {

// Π—Π΄Π΅ΡΡŒ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹;

ΠΊΠΎΠ½Π΅Ρ†;

}


ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ вычисляСтся Π² Π½Π°Ρ‡Π°Π»Π΅ Ρ†ΠΈΠΊΠ»Π° while, Ссли Π·Π°Ρ€Π°Π½Π΅Π΅ условиС Π»ΠΎΠΆΠ½ΠΎ, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚.Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Π΄Π°ΠΆΠ΅ Ссли условиС Π»ΠΎΠΆΠ½ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» do.. while .

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Ρ†ΠΈΠΊΠ»Π° while для отобраТСния чисСл

Π’ этом простом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ использования Ρ†ΠΈΠΊΠ»Π° while Π² PHP; ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ присваиваСтся Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ провСряСтся Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ увСличиваСтся Π½Π° 1, Ссли условиС истинно.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½-Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ ΠΈ ΠΊΠΎΠ΄

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ Ρ†ΠΈΠΊΠ» while ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅:

$ Ρ… = 1;

while ($ x <= 5) {

echo $ x.Β«
Β»;

$ x ++;

}


ИспользованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ†ΠΈΠΊΠ»Π° while

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ отобраТаСтся Π² HTML-Ρ‚Π΅Π³Π΅ div.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½-Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ ΠΈ ΠΊΠΎΠ΄

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ для Ρ†ΠΈΠΊΠ»Π° while:

$ Ρ… = 5;

while ($ x> = 1) {

echo $ x.Β«
Β»;

$ x--;

}


ИспользованиС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова end while Π² Ρ†ΠΈΠΊΠ»Π΅ while

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово end while Π² Ρ†ΠΈΠΊΠ»Π΅ while. Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½-Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ ΠΈ ΠΊΠΎΠ΄

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ врСмя Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

17

// Π”Π΅ΠΌΠΎ PHP whileloop

$ x = 1;

Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ($ x <= 5):

echo $ x.Β«
Β»;

$ x ++;

ΠΊΠΎΠ½Π΅Ρ†;

?>


ДСмонстрация увСличСния Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Π² Ρ†ΠΈΠΊΠ»Π΅ while

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΏΡ€ΠΈΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ€Π°Π²Π½ΠΎ 1 с использованиСм ++ ΠΈΠ»ΠΈ -. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ значСния. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΈΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ€Π°Π²Π½ΠΎ 10.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½-Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ ΠΈ ΠΊΠΎΠ΄

ВыполняСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

$ Ρ… = 10;

ΠΏΡ€ΠΈ этом ($ x <= 50):

echo $ x.Β«
Β»;

$ x = $ x + 10;

ΠΊΠΎΠ½Π΅Ρ†;


ИспользованиС Ρ†ΠΈΠΊΠ»Π° while с массивами PHP

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» PHP while с массивами. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ создаСтся массив ΠΈΠ· пяти элСмСнтов. Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ†ΠΈΠΊΠ»Π΅ while - это общая Π΄Π»ΠΈΠ½Π° элСмСнтов с использованиСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ count . Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ†ΠΈΠΊΠ» while Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ достигнСт максимальной Π΄Π»ΠΈΠ½Ρ‹ массива.На ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ элСмСнта отобраТаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° echo PHP.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½-Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ ΠΈ ΠΊΠΎΠ΄

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ элСмСнты массива ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° while:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

17

// Π”Π΅ΠΌΠΎ PHP whileloop

$ arr_variable = array (10,20,30,40,50);

$ x = 0;

while ($ x

echo "Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта массива = $ arr_variable [$ x]
";

$ x ++;

}

?>


ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Ρ†ΠΈΠΊΠ»Π° while с ассоциативным массивом

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ создаСтся ассоциативный массив ΠΈΠ· Ρ‚Ρ€Π΅Ρ… элСмСнтов.Π¦ΠΈΠΊΠ» while ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ / Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ , Π³Π΄Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ индСкс ΠΈ значСния элСмСнтов.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½-Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ ΠΈ ΠΊΠΎΠ΄

Π‘Π½Π°Ρ‡Π°Π»Π° создаСтся ассоциативный массив:

$ arr_courses = array (

"course1" => "PHP",

"course2" => "MySQL",

"course3" => "Java",

);


ПослС этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ†ΠΈΠΊΠ» while:

while (list ($ key, $ value) = each ($ arr_courses)) {

echo $ key.'='. $ value. "
";

}


ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ вмСсто массива Π² PHP | by Ujjwal Ojha

Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ - это ΠžΠ§Π•ΠΠ¬ мощная концСпция, Π΄Π°ΡŽΡ‰Π°Ρ мноТСство прСимущСств. Π― ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ°Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΈ Π½Π΅Π΄ΠΎΠΎΡ†Π΅Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ PHP. Π’ этом постС я объясню, ΠΊΠ°ΠΊΠΎΠ²Ρ‹ прСимущСства Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, надСюсь, ΠΌΠΎΡ‚ΠΈΠ²ΠΈΡ€ΡƒΡŽΡ‚ вас ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС большС ΠΈ большС Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² PHP.

Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ - это особый Ρ‚ΠΈΠΏ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обСспСчиваСт простой способ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² PHP для мноТСства случаСв использования. Π˜Ρ‚Π°ΠΊ, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΌΡ‹ ΡƒΠ·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€.

ΠœΠ°ΡΡΠΈΠ²Ρ‹ - Π½Π΅ СдинствСнноС, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ foreach Π² PHP. Π›ΡŽΠ±ΠΎΠΉ экзСмпляр любого класса, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ интСрфСйс Iterator , ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ с использованиСм foreach .

Π’ΠΎΡ‚ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°. Он просто ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ foreach.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ совСт: Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ интСрфСйс IteratorAggregate.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ сущСствуСт функция, которая ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ список содСрТимого изобраТСния Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ ΠΊΡƒΠ΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² ΠΊΠΎΡ€Π·ΠΈΠ½Ρƒ AWS S3.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ΠΎΠΌ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚Π΅ всС изобраТСния Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ Π΅Ρ‰Π΅ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Π°ΠΌ понадобится ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ ΠΈΠ· ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

ВмСсто этого, Ссли Π²Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Iterator, ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π»Π΅Π½ΠΈΠ²ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ изобраТСния Π²ΠΎ врСмя ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ всСх ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ совСт: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ iterable typehint для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ массивов, Π° Ρ‚Π°ΠΊΠΆΠ΅ Iterator.

Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ - это самый простой способ создания ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² с ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ. Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово yield , ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ позволяСт Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ с ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° Iterator ΠΌΠΎΠΆΠ½ΠΎ довольно Π»Π΅Π³ΠΊΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π² Π³ΠΎΡ€Π°Π·Π΄ΠΎ мСньшС ΠΊΠΎΠ΄Π°.

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅ΠΌ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ эквивалСнтного ΠΊΠΎΠ΄Π° с использованиСм массива.

Π― использовал Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ xhprof для профилирования Π΄Π²ΡƒΡ… ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠ΄Π° для ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ содСрТимого Ρ„Π°ΠΉΠ»Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 5 ΠœΠ‘, ΠΈ Π²ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹:

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ - это ΠΎΡ‚Ρ‡Π΅Ρ‚ Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΠΎΠ³ΠΎ PHP-скрипта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ массив, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ - ΠΎΡ‚Ρ‡Π΅Ρ‚ скрипта php, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€. ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° памяти, которая ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π° красным ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠΌ, ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΏΠΎΡ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹. Π‘ΠΊΡ€ΠΈΠΏΡ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€, Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ прСвосходит Π΄Ρ€ΡƒΠ³ΠΎΠΉ скрипт, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ массив.

Early Break

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚Π΅ Ρ†ΠΈΠΊΠ», ΠΈ Π²Ρ‹ сэкономитС ΠΌΠ½ΠΎΠ³ΠΎ памяти, выполняСмой Π»Π΅Π½ΠΈΠ²ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ….

ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌ

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ send ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ значСния ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π² качСствС выраТСния yield. Π­Ρ‚ΠΎ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎΡΡ‚ΠΎΡ€ΠΎΠ½Π½ΡŽΡŽ связь ΠΎΡ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΊ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌΡƒ Π² двусторонний ΠΊΠ°Π½Π°Π» ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ.

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ рСгистратора с использованиСм send () :

БовмСстных ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

Двусторонняя связь ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ Π°Π±ΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ с использованиСм ΠΌΠ΅Ρ‚ΠΎΠ΄Π° send ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ совмСстной многозадачности.

По сути, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ нСсколькими Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ, выполняя ΠΎΠ΄Π½Ρƒ Π·Π°Π΄Π°Ρ‡Ρƒ Π·Π° Ρ€Π°Π·, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ Π΅Π΅ с Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ.

Никита Попов написал ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π±Π»ΠΎΠ³ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ с использованиСм сопрограмм с использованиСм Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² PHP.

Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ - это нСдостаточно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ концСпция, которая Π΄Π°Π΅Ρ‚ Ρ‚Π°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ прСимущСств, ΠΈ я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π΅Π΅ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π°Ρ‰Π΅, Π³Π΄Π΅ это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

для - ДокумСнтация - Twig

ΠŸΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ список ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ прСдоставляСтся Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ :

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ массивом, Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΌ ΠŸΡ€ΠΎΡ…ΠΎΠ΄Π½ΠΎΠΉ интСрфСйс .

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ чисСл, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ .. ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€:

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π° Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ всС числа ΠΎΡ‚ 0 Π΄ΠΎ 10.

ΠœΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ с Π±ΡƒΠΊΠ²Π°ΠΌΠΈ:

МодСль .. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ любоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с ΠΎΠ±Π΅ΠΈΡ… сторон:

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ шаг, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΡ‚ 1, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ range вмСсто.

Π’Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° Ρ†ΠΈΠΊΠ»Π° для Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ:

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ ОписаниС
loop.index ВСкущая итСрация Ρ†ΠΈΠΊΠ»Π°.(1 проиндСксировано)
loop.index0 ВСкущая итСрация Ρ†ΠΈΠΊΠ»Π°. (0 проиндСксировано)
пСтля. РСвиндСкс ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ ΠΎΡ‚ ΠΊΠΎΠ½Ρ†Π° Ρ†ΠΈΠΊΠ»Π° (1 индСксируСтся)
пСтля. Revindex0 Число ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ ΠΎΡ‚ ΠΊΠΎΠ½Ρ†Π° Ρ†ΠΈΠΊΠ»Π° (индСксируСтся 0)
пСтля.пСрвая Π˜ΡΡ‚ΠΈΠ½Π½ΠΎ, Ссли пСрвая итСрация
ΠΊΠΎΠ½Π΅Ρ† ΠΏΠ΅Ρ‚Π»ΠΈ Π˜ΡΡ‚ΠΈΠ½Π½ΠΎ, Ссли послСдняя итСрация
Π΄Π»ΠΈΠ½Π° ΠΏΠ΅Ρ‚Π»ΠΈ ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ элСмСнтов Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ
пСтля. Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠ°Ρ Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ контСкст

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

ΠŸΠ΅Ρ‚Π»Ρ .Π΄Π»ΠΈΠ½Π° , пСтля. рСвиндСкс , пСтля. рСвиндСкс0 , ΠΈ loop.last ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… доступны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для массивов PHP ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйс Countable . Они Ρ‚Π°ΠΊΠΆΠ΅ нСдоступны, ΠΊΠΎΠ³Π΄Π° Ρ†ΠΈΠΊΠ» с условиСм.

ΠšΠΎΠ½Ρ‡ΠΈΠΊ

Начиная с Twig 2.10, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ вмСсто Π½Π΅Π³ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€-Ρ„ΠΈΠ»ΡŒΡ‚Ρ€, ΠΈΠ»ΠΈ , Ссли состояниС Π²Π½ΡƒΡ‚Ρ€ΠΈ для корпуса (Ссли вашС состояниС зависит ΠΎΡ‚ пСрСмСнная обновляСтся Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π°, ΠΈ Π²Ρ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ†ΠΈΠΊΠ» ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ).

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ PHP, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Π² Ρ†ΠΈΠΊΠ»Π΅. Π’Ρ‹ ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²ΠΎ врСмя ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ позволяСт ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ всС Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ:

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ пСрСмСнная Ρ†ΠΈΠΊΠ»Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, поэтому Π½Π΅ подсчСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Π½Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½Π½Ρ‹Ρ…. Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ свойства, ΠΊΠ°ΠΊ loop.last Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΏΡ€ΠΈ использовании условий Ρ†ΠΈΠΊΠ»Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

ИспользованиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ†ΠΈΠΊΠ»Π° Π² условии Π½Π΅ рСкомСндуСтся, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это вСроятно, Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚Π΅.НапримСр, Π΄ΠΎΠ±Π°Π²ΠΈΠ² условиС Π²Ρ€ΠΎΠ΄Π΅ loop.index> 4 Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ индСкс Ρ‚ΠΎΠ»ΡŒΠΊΠΎ увСличиваСтся, ΠΊΠΎΠ³Π΄Π° условиС истинно (поэтому условиС Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ°Ρ‚Ρ‡).

Если ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π΅ Π±Ρ‹Π»ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Ρ‹Π»Π° пустой, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°ΠΌΠ΅Π½Π° Π±Π»ΠΎΠΊΠ° с использованиСм ΠΈΠ½Π°Ρ‡Π΅ :

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ†ΠΈΠΊΠ» ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ значСния ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.