Пред.
След.
Макеты страниц
Распознанный текст, спецсимволы и формулы могут содержать ошибки, поэтому с корректным вариантом рекомендуем ознакомиться на отсканированных изображениях учебника выше Также, советуем воспользоваться поиском по сайту, мы уверены, что вы сможете найти больше информации по нужной Вам тематике ДЛЯ СТУДЕНТОВ И ШКОЛЬНИКОВ ЕСТЬ
ZADANIA.TO
8.4. Массивыряд переменных, упорядоченных по имени и имеющих различный примера что у вас есть 20 которые нужно внести в программу. Можно для удобства назначить одинаковые имена и ставить в конце каждого имени число в соответствии с номером названия. Получится простейший одномерный массив. РНР предоставляет большой выбор средств для детальной и удобной работы с таким набором — массивом. Число (так называемый индекс) нужно заключать в квадратные скобки. Допустим, есть ряд строковых переменных — компьютер. Интернет, монитор. Выберем для имя любое, как и для обычной переменной. Индекс в массивах начинается не с единицы, а с нуля, и, таким образом, для внесения наших слов в массив надо сделать так:
$m[0] = "компьютер"; $m[1] = "Интернет"; $m[2] = "модем"; $m[3] = "монитор"; Теперь у нас с именем $m и максимальным индексом (количество элементов в массиве) — 4. Именно 4, хотя последний заполненный элемент — 3. Если мы попробуем считать элемент с четвертым индексом, результат будет равен пустой строке, так как там просто ничего нет. Обращаться к элементам массива нужно по имени массива и его индексу, что и составляет основное удобство. Например, мы можем вывести на экран все элементы массива: $i = 0; while ($i < count ($m)) { echo $m[$i] . "<br>"; $i++; } Функция count($m) выдает нам количество элементов массива. Таким образом, у нас всегда есть возможность знать, сколько элементов в данном массиве. Массивы в РНР — это очень мощный и гибкий механизм. Он позволит вам сделать практически все, что вы только можете пожелать сделать с массивами. Поддерживаются вложенные массивы, их вложенность никак явно не ограничена. В РНР существует большое количество функций для работы с массивами, они помогут вам выполнить необходимые операции без лишних затрат времени и сил. Одномерные массивыОдномерный массив состоит из одной строки. РНР поддерживает как скалярные (0,1,2...), так и ассоциативные массивы ("a", "b", "c"...). Между ними, практически, нет никакой разницы. Создать массив можно с помощью функций list () или array () или просто определить значения элементов массива. Например: $a[0] = "abc"; $а[1] = "def"; $b["foo"] = 13; Есть еще один способ создания массивов: путем простого добавления в него элементов. При присвоении значения переменной массива с пустыми скобками это значение просто добавляется в конец массива. Например: $а[] = "hello"; // $а[2] = "hello" $а[] = "world"; // $а[3] = "world" Сортировать массивы можно с помощью функций asort (), arsort (), ksort (), rsort (), sort (), uasort(),usort (), nuksort () в зависимости от необходимого типа сортировки (см. п. 20.6). Определить число элементов в массиве можно с помощью функции count(). Перемещаться по массиву можно с помощью функций next () (следующий элемент) и prev () (предыдущий элемент). Еще один способ перемещения по массиву — использование функции each () (вывод необходимого элемента). Многомерные массивыНесмотря на пугающее название, многомерные массивы на самом деле очень просты. Для каждого измерения массива в конце добавляется дополнительный индекс. Например: $а[1] = $f; // примеры одномерных массивов $a["foo"] = $f; $a[l] [0] = $f; // двумерный массив $a["foo"] [2] = $f; // числовые и ассоциативные индексы $а[3] ["bar"] = $f; // можно смешивать $a["foo"] [4] ["bar"] [0] = $f; // четырехмерный массив В РНР 3 нельзя ссылаться на многомерные массивы в строках. Например, следующая строка не даст желаемого результата: $a[3]['bar'] = 'Bob'; echo "Так работать не будет: $а[3][bar]"; В РНР 3 будет выведена строка «Так работать не будет: Array [bar]». Однако для получения нужного результата можно использовать оператор конкатенации строк $а[3]['bar'] = 'Bob'; echo "Так работать будет: " . $a[3][bar]; В результате будет выведено: «Так работать будет». В РНР 4 эту проблему можно решить, заключив ссылку на массив (в строке) в фигурные скобки: $а[3]['bar'] = 'Bob'; echo "Так работать будет: {$а[3][bar]}"; Заполнять многомерные массивы можно по-разному. Самым тяжелым для понимания является использование команды array() для ассоциативных массивов. Следующие два примера кода одинаково заполняют одномерный массив. Первый пример: $а["color"] = "red"; $a["taste"] = "sweet"; $a["shape"] = "round"; $a["name"] = "apple"; $a[3] = 4; Второй пример: $a = array( "color" => "red", "taste" => "sweet", "shape" => "round", "name" => "apple", 3 => 4 ); Функция array () для многомерных массивов может быть вложенной (пример 8.4). Пример 8.4. Многомерные массивы <?php $а = array( "apple" => array( "color" => "red", "taste" => "sweet", "shape" =>- "round" ), "orange" => array( "color" => "orange", "taste" => "tart", "shape" => "round" ), "banana" => array( "color" => "yellow", "taste" => "pasty", "shape" => "banana-shaped" ) ); echo $a["apple"]["taste"]; ?> Результат выполнения программы представлен на рис. 8.2.
Рис. 8.2. Результат выполнения скрипта Array — тип данных, такой же, как integer или string. Если переменная $array — массив, то gettype ($array) выдаст array (имя переменной выбрано случайным образом и ктипуданныхоно отношения не имеет), ais_array ($array) выдаст true. ВНИМАНИЕ Индексы в массиве — это указатели на его элементы. РНР поддерживает как скалярные, так и ассоциативные индексы массивов. Ассоциативными массивами пользуются, например, в функциях работы с MySQL: $row = mysql_fetch_array($result); print ($row["field1"]. $row["field2"]. $row["field3"]). Теперь поговорим о создании массивов поподробнее. Первое средство — функция array: $array = array($val1, $val2, $val3); $array2 = array($key1 => $val1, $key2 => $val2, $key3 => $val3); В первом случае получится скалярный массив, во втором — ассоциативный. Можно создать массив, просто указав индекс и значение. $array[$key] = $val; Переменная $array, если она не существовала до этого, станет массивом, а в ячейку с индексом $key (не обязательно 0) помещается значение $val. Несомненным достоинством РНР является отсутствие необходимости указывать индекс ячейки. $new_array[] = "0"; // то же самое, что $new_array[0] = "0"; $new_array[] = "1"; // то же самое, что $new_array[1] = "1"; Вывод переменной в тексте часто делают таким образом: print ("test $variable text"); Но если вы попытаетесь вывести элемент массива таким же образом, то у вас ничего не получится. В официальной документации по РНР (на сайте www.php.net) приведены наглядные примеры многомерных массивов. Функции, которые наиболее часто используются для работы с массивами — это sizeof (размер массива) и list & each (выбирают из каждого массива имя элемента и его Чтобы обработать все элементы скалярного массива, в котором индексы элементов представляют собой числовой ряд (от 0 до $n) достаточно использовать функцию sizeof и цикл: for ($i=0;$i<sizeof($array);$i++) { ... }; Если элементы начинаются не с 0, а с известного $m, то можно действовать так: for ($i=$m;$i<sizeof($array)+$m;$i++) { ... }; Но если массив ассоциативный (возможно, смешанный) или мы вообще не знаем, есть в ряду пустые места или нет, то нужно воспользоваться функциями list и each: while (list($key, $val) = each ($array)) { Если надо вывести значения элементов в документ, то делается так: print ("...$val..."); Чтобы обработать массив, обращаемся к его элементам: $array[$key] = somefunction($val); Мы специально отметили возможность разрывов в скалярных индексах. Дело в том, что те, кто работал с массивами, например, в Паскале, знают, что там массивы объявляются по принципу «от сихдо сих». Но в отличие от того же Паскаля, в РНР массивы ничем не ограничены, и есть возможность создавать массивы хоть с сотого элемента, предыдущих девяносто девяти просто не будет существовать (соответственно, sizeof такого массива будет 1). В любой момент можно создать новый элемент или удалить существующий (если его не будет, программа «ругаться» не Поэтому, если при отладке программы вы не уверены, что содержится в массиве, то сделайте следующее: while (list{$k, $v) = each ($array)) print ("$k - $v<br>"); Другие функции, работающие с массивами: array_diff (сравнение массивов), array_rand (получение случайных элементов массива), array_unique (удаление повторов элементов) и in_array (проверка, есть ли заданное значение в массиве). Нужно отметить еще одну особенность РНР при работе с массивами: в отличие от других языков, РНР позволяет задавать массивы практически любой сложности непосредственно в теле самой программы. Может быть, с первого взгляда эта возможность не покажется вам такой уж однако это в корне неверное На практике раз придется столкнуться с необходимостью описания какой-нибудь сложной структуры и наполнением этой структуры данными. В других языках для этого, как правило, приходится писать дополнительный код, что не всегда удобно. В РНР же вы можете сделать это очень просто и элегантно: $data = array (1, 10, 100, 1000, // числовые данные 'Some text', 'Another text', // строковые данные 'name' => 'John', 'age' => 23, // ассоциативные связи в массиве 'date' => array('day'=>10,'month'=>'may','year'=>2001)); //вложенный массив Как видно, различные данные могут быть совмещены вместе в единой структуре без каких-либо проблем. Посмотрим, как можно обратиться к этим данным: echo data[1] ; // результат — 10 echo $data[5]; // результат — 'Another text' echo $data['age']; // результат - 23 echo $data['date']['month']; // результат - 'may'
|
1 |
Оглавление
|