2.1.2. Расширения, относящиеся к переменным и типам
Как создавать переменные, какие виды переменых присутствуют в PHP и как приводить их к тому или иному типу мы уже знаем. Сейчас же приведем ряд примеров использования встроенных функций, которые позволяют значительно расширить возможности разработчиков по работе с переменными (см. пример 8.1).
По ходу просмотра примеров не пренебрегайте набором кода и обращением к официальному справочнику. Примеры большие, поэтому для лучшего восприятия разбивайте их на более мелкие и тестируйте на локальном сервере. В справочнике посетите соответствующие разделы и хотя бы ознакомьтесь с другими доступными функциями, чтобы в ходе практики вы знали, где вслучае необходимости их можно найти. После можете приступать к решению задач.
<?php //Создадим несколько переменных разных типов $var_int=15; $var_float=23.57; $var_str="apple"; $var_m=["name"=>"Dima", 11]; $var_bool=true; $var_null=null; echo '-------- var_dump() -------- <br><br>'; //var_dump() выводит информацию о переменных и не возвращает значения //Выведет int(15) float(23.57) string(5) "apple" bool(true) NULL var_dump($var_int, $var_float, $var_str, $var_bool, $var_null); echo '<br>'; var_dump($var_m); //Выведет array(2) { ["name"]=> string(4) "Dima" [0]=> int(11) } echo '<br><br><br>'; echo '-------- print_r() --------<br><br>'; //print_r() выводит удобочитаемую информацию о переменной print_r($var_float); //Выведет 23.57 echo '<br>'; print_r($var_str); //Выведет apple echo '<br>'; print_r($var_m); //Выведет Array ( [name] => Dima [0] => 11 ) echo '<br><br><br>'; echo '-------- is_int(), is_array(), is_bool() и т.д. --------<br><br>'; //is_int(), is_array(), is_bool() и аналогичные функции проверяют, относится //ли переменная к данному типу. В случае успеха возвращает true, иначе false var_dump(is_int($var_int)); //Выведет bool(true) echo '<br>'; var_dump(is_string($var_int)); //Выведет bool(false) echo '<br>'; var_dump(is_null($var_null)); //Выведет bool(true) echo '<br><br><br>'; echo '-------- gettype() --------<br><br>'; //gettype() возвращает тип переменной: "boolen", "integer", "double", "string", //"array", "object", "resource", "NULL", "unknown type", echo gettype($var_int).'<br>'; //Выведет integer echo gettype($var_m).'<br><br><br>'; //Выведет array echo '-------- settype() --------<br><br>'; //settype() присваивает переменной новый тип, //можно применять bool, int, float, string, array, object, null var_dump(settype($var_int, "string")); //Выведет bool(true), преобразовали успешно echo '<br>'; var_dump(settype($var_float, "bool")); //Выведет bool(true), преобразовали успешно echo '<br><br><br>'; echo '-------- boolval() и аналогичные:<br><br>'; //boolval() возвращает логическое значение переменной //Также имеются функции strval(), intval(), floatval() var_dump(boolval($var_str)); //Выведет bool(true) echo '<br>'; var_dump(boolval($var_null)); //Выведет bool(false) echo '<br><br><br>'; echo '-------- empty() -------- <br><br>'; //empty() проверяет, пуста ли переменная (переменная считается пустой, //если она не существует или её значение равно FALSE; var_dump(empty($a)); //Выведет bool(true), т.к. она еще не существует $a; var_dump(empty($a)); //Выведет bool(true), т.к. она еще не инициализирована $a=false; var_dump(empty($a)); //Выведет bool(true), т.к. false $a=null; var_dump(empty($a)); //Выведет bool(true), т.к. null echo '<br>'; //Во всех остальных случаях переменная считается не пустой и вернет false var_dump(empty($var_int)); //Выведет bool(false) var_dump(empty($var_m)); //Выведет bool(false) echo '<br><br><br>'; echo '-------- isset() -------- <br><br>'; //isset() определяет, была ли установлена переменная значением отличным от NULL //Возвращает TRUE в случае успеха и FALSE в противном случае var_dump(isset($b)); //Выведет bool(false), т.к. она еще не существует $b; var_dump(isset($b)); //Выведет bool(false), т.к. она еще не инициализирована $b=null; var_dump(isset($b)); //Выведет bool(false), т.к. null echo '<br>'; //Во всех остальных случаях переменная считается установленной и вернет true $b=false; var_dump(isset($b)); //Выведет bool(true) $b=''; var_dump(isset($b)); //Выведет bool(true) $b=0; var_dump(isset($b)); //Выведет bool(true) $b=[]; var_dump(isset($b)); //Выведет bool(true) echo '<br><br><br>'; echo '-------- unset() -------- <br><br>'; //unset() удаляет указанные переменные и не возвращает значения unset($var_int, $var_m); var_dump(empty($var_int)); //Тут выведет bool(true) var_dump(empty($var_m)); //Тут выведет bool(true) ?>
Пример 8.1. Использование функций для работы с переменными
Если данные хранящиеся в переменной, например, в массиве, необходимо сохранить или передать между скриптами, их можно сериализовать:
- serialize() – конвертирует переменную в строку, содержащую ее потоковое представление, которая может быть использована для хранения или передачи переменной между скриптами без потери типа и структуры (возвращает эту строку);
- unserialize() – конвертирует сериализованную переменную обратно в значение PHP.
Использование функций serialize() и unserialize() показано в примере 8.2.
<?php //Создадим массив с данными $var_m=["name"=>"Dima", 11, ["one"=>"orange", true, 33]]; //Выведем информацию о нем: array(3) { ["name"]=> string(4) "Dima" [0]=> int(11) //[1]=> array(3) { ["one"]=> string(6) "orange" [0]=> bool(true) [1]=> int(33) } } var_dump($var_m); echo '<br><br>'; //Пусть нам нужно сохранить его, например, в базе данных MySQL //Сериализуем его, преобразовав в специальную строку, для удобства хранения $a=serialize($var_m); //Посмотрим, как выглядит строка для хранения: a:3:{s:4:"name"; //s:4:"Dima";i:0;i:11;i:1;a:3:{s:3:"one";s:6:"orange";i:0;b:1;i:1;i:33;}} echo $a.'<br><br>'; //Теперь нам нужно извлечь хранимые данные для использования //Преобразуем строку обратно в массив $b=unserialize($a); //Посмотрим, что получилось: array(3) { ["name"]=> string(4) "Dima" [0]=> int(11) //[1]=> array(3) { ["one"]=> string(6) "orange" [0]=> bool(true) [1]=> int(33) } } var_dump($b); ?>
Пример 8.2. Использование сериализации данных
Функции для работы с массивами выделены в отдельный подраздел. Подробное описание, опять же, смотрите в официальном справочнике, мы же приведем порядка 15-20 примеров с краткими комментариями (см. пример 8.3).
<?php //Создадим массивы с данными $m_1=["1", 2, "three"]; $m_2=["one"=>1, 3, "city", false]; $m_3=[1, 1, "orange"]; echo '-------- count() --------<br><br>'; //count() подсчитывает количество элементов массива или что-то в объекте //и возвращает полученное число var_dump(count($m_1)); //Выведет int(3) echo '<br>'; var_dump(count($m_2)); //Выведет int(4) echo '<br><br><br>'; echo '-------- in_array() --------<br><br>'; //in_array() проверяет, присутствует ли значение в массиве, и в случае успеха //возвращает true, иначе false var_dump(in_array(1, $m_1)); //Выведет bool(true) echo '<br>'; //Зададим строгое соответствие var_dump(in_array(1, $m_1, true)); //Выведет bool(false) echo '<br><br><br>'; echo '-------- array_key_exists(), см. также array_keys() --------<br><br>'; //array_key_exists() проверяет (не строго), присутствует ли в массиве //указанный ключ, и в случае успеха возвращает true, иначе false var_dump(array_key_exists(1, $m_1)); //Выведет bool(true) echo '<br>'; var_dump(array_key_exists('1', $m_1)); //Выведет bool(true) echo '<br>'; var_dump(array_key_exists(3, $m_1)); //Выведет bool(false) echo '<br><br><br>'; echo '-------- array_flip() --------<br><br>'; //array_flip() меняет местами ключи с их значениями в массиве и возвращает //перевернутый массив или null в случае ошибки //Выведет array(3) {[1]=>int(0) [2]=>int(1) ["three"]=>int(2)} var_dump(array_flip($m_1)); echo '<br><br><br>'; echo '-------- array_reverse() --------<br><br>'; //array_reverse() возвращает массив с элементами в обратном порядке //Выведет array(3) {[0]=>string(5) "three" [1]=>int(2) [2]=>string(1) "1"} var_dump(array_reverse($m_1)); echo '<br><br><br>'; echo '-------- array_unique() --------<br><br>'; //array_unique() убирает повторяющиеся значения из массива //и возвращает отфильтрованный массив //Выведет array(2) {[0]=>int(1) [2]=>string(6) "orange"} var_dump(array_unique($m_3)); echo '<br><br><br>'; echo '-------- array_unshift(), см. также array_shift() --------<br><br>'; //array_unshift() добавляет один или несколько элементов в начало массива //и возвращает новое количество элементов в массиве var_dump(array_unshift($m_1, 4, 5)); //Выведет int(3) echo '<br>'; var_dump($m_1); //Выведет array(3) {[0]=>int(4) [1]=>int(5) [2]=>int(2)} echo '<br><br><br>'; echo '-------- array_push(), см. также array_pop() --------<br><br>'; //array_push() добавляет один или несколько элементов в конец массива //и возвращает новое количество элементов в массиве var_dump(array_push($m_1, "apple", 7)); //Выведет int(5) echo '<br>'; //array(5){[0]=>int(4) [1]=>int(5) [2]=>int(2) [3]=>string(5) "apple" [4]=>int(7)} var_dump($m_1); //Т.е. массив имеет вид [4,5,2,"apple",7] echo '<br><br><br>'; echo '-------- array_slice() --------<br><br>'; //array_slice() выбирает часть массива в соответствии //с указанными параметрами и возвращает ее (сам массив остается прежним) //Выведет array(2) {[0]=>int(4) [1]=>int(5)}, т.е. [4,5] var_dump(array_slice($m_1, 0, 2)); //2 символа с начала echo '<br>'; //array(5) {[0]=> int(4) [1]=>int(5) [2]=>int(2) [3]=>string(5) "apple" [4]=>int(7)} var_dump(array_slice($m_1, 0, 9)); //Выведет все элементы массива, т.к. их меньше echo '<br>'; //array(2) {[0]=>int(2) [1]=>string(5) "apple"}, т.е. [2, "apple"] var_dump(array_slice($m_1, -3, 2)); //2 символа начиная с 3 позиции с конца echo '<br>'; //array(3) {[0]=>int(5) [1]=>int(2) [2]=>string(5) "apple"}, т.е. [5, 2, "apple"] var_dump(array_slice($m_1, -4, -1)); //Отсчет с конца до -1 позиции echo '<br><br><br>'; echo '-------- array_splice() --------<br><br>'; //array_splice() удаляет часть массива или заменяет её другими элементами //и возвращает массив, содержащий удалённые элементы $m_4=[1,2,3,4,5]; //Выведет array(3) {[0]=>int(2) [1]=>int(3) [2]=>int(4)} var_dump(array_splice($m_4, 1, 3)); //Теперь $m_4==[1,5] echo '<br>'; //Выведет array(1) {[0]=>int(5)} (один удалили, а 4 добавили) var_dump(array_splice($m_4, -1, 1, [6,7,8,9])); //Теперь $m_4==[1,6,7,8,9] echo '<br>'; //Выведет array(1) {[0]=> int(7)} (удалили один элемент с -3 по -2 не включая) var_dump(array_splice($m_4, -3, -2)); //Теперь $m_4==[1,6,9] echo '<br>'; //Выведет array(4) {[0]=>int(1) [1]=>int(6) [2]=>int(8) [3]=>int(9)} var_dump(array_splice($m_4, 0)); //Теперь $m_4==[] (удалили с 0 и до конца) echo '<br><br><br>'; echo '-------- array_product(), см. также array_sum() --------<br><br>'; //array_product() возвращает произведение значений массива $m_5=[1,2,3]; var_dump(array_product($m_5)); //Выведет int(6) echo '<br><br><br>'; echo '-------- array_rand(), см. также shuffle () --------<br><br>'; //array_rand() выбирает одно или несколько случайных значений //из массива и возвращает их ключи var_dump(array_rand($m_5)); //Вывело int(0) (случайный ключ массива) echo '<br><br><br>'; echo '-------- list() --------<br><br>'; //list() языковая конструкция, которая присваивает переменным из списка значения //из массива за одну операцию; возвращает присвоенный массив $m_10=[1,4,7]; //Присвоим значения массива переменным list($d_1, $d_2, $d_3)=$m_10; var_dump($d_1, $d_2, $d_3); //Выведет int(1) int(4) int(7) echo '<br>'; list($d_4, list($d_5, $d_6), $d_7) = [1, [7, 9], "yes"]; var_dump($d_4, $d_5, $d_6, $d_7); //Выведет int(1) int(7) int(9) string(3) "yes" echo '<br><br><br>'; echo 'sort(), см. также rsort(), usort(), uasort(), ksort(),<br> krsort(), uksort(), '. 'asort(), arsort(), natsort(), natcasesort(), array_multisort() и др. <br><br>'; //sort() сортирует массив и в случае успеха возвращает true, иначе false $m_6=[7,3,6]; var_dump(sort($m_6)); //Выведет bool(true) echo '<br>'; var_dump($m_6); //Выведет array(3) {[0]=>int(3) [1]=>int(6) [2]=>int(7)} echo '<br>'; $m_7=['Петя','Вася', 'вася']; var_dump(sort($m_7, true)); //Ключи сохраняются echo '<br>'; //Выведет array(3) {[0]=>string(8) "Вася" [1]=>string(8) "Петя" [2]=>string(8) "вася"} var_dump($m_7); echo '<br><br><br>'; echo '-------- array_filter() --------<br><br>'; //array_filter() фильтрует элементы массива с помощью callback-функции и //возвращает отфильтрованный массив function my_func($val){ return $val>5; } $m_8=[1,2,3,4,5,6,7]; //Выведет array(2) {[5]=>int(6) [6]=>int(7)} (передавали только значения) var_dump(array_filter($m_8, "my_func")); echo '<br>'; //Выведет array(1) {[6]=>int(7)} (передавали только ключи) var_dump(array_filter($m_8, "my_func", ARRAY_FILTER_USE_KEY)); echo '<br>'; function my_func_2($v, $k){ return ($v+$k)>7; } //Выведет array(2) {[5]=>int(6) [6]=>int(7)} (передавали пары значение-ключ) var_dump(array_filter($m_8, "my_func_2", ARRAY_FILTER_USE_BOTH)); echo '<br><br><br>'; echo 'array_walk(), см. также array_walk_recursive(), '. 'array_map(), array_reduce(), <br><br>'; //array_walk() применяет заданную пользователем функцию к каждому элементу //массива и в случае успеха возвращает true, иначе false function my_func_3(&$v, $k){ //Значение передали по ссылке (можно и по значению) return $v=$v+$k; } $m_9=[1,2,3]; var_dump(array_walk($m_9, "my_func_3")); //Выведет bool(true) echo '<br>'; var_dump($m_9); //Выведет array(3) {[0]=>int(1) [1]=>int(3) [2]=>int(5)} echo '<br><br><br>'; /* Также посмотрите функции сравнения массивов и работы с несколькими массивами: array_intersect() и похожие, array_diff() и похожие, array_merge() и др. */ ?>
Пример 8.3. Работа с массивами
Обратите также внимание на стандартные подразделы 'Управление функциями', 'Классы и объекты'.
- 2.1.1. Предисловие ко второй части учебника
- 2.1.2. Расширения, относящиеся к переменным и типам
- 2.1.3. Обработка текста
Словарь новых английских слов
dump [dʌmp] – куча хлама, вывод подробной информации на экран. print [prɪnt] – печатать. serialize [ˈsɪərɪəlʌɪz] – издавать сериями, выпусками. long [lɔːŋ] – длинный. real [rɪəl] – реальный, настоящий. import [ˈɪmpɔːt] – ввозить, импортировать export [ɪkˈspɔːt] – вывозить, экспортировать. debug [diːˈbʌɡ] – отладка, устранять ошибки. flip [flɪp] – транспонировать, перевернуть. reverse [rɪˈvəːs] – менять направление. unique [juːˈniːk] – уникальный, особенный. shift [ʃɪft] – сдвигать, перемещать, переключать. push [pʊʃ] – толкать, продвигать. pop [pɒp] – выбирать, извлекать из стека. slice [slʌɪs] – часть, доля, резать ломтиками. splice [splʌɪs] – сращивать, соединять внакрой. product [ˈprɒdʌkt] – продукт, результат, произведение. sum [sʌm] – сумма, суммировать. random [ˈrandəm] – случайный, произвольный. shuffle [ˈʃʌf(ə)l] – перемешивать. sort [sɔːt] – сортировать. filter [ˈfɪltə] – фильтр, фильтровать. walk [wɔːk] – ходить, гулять. reduce [rɪˈdjuːs] – уменьшать, сокращать. |
search [səːtʃ] – искать, поиск. merge [məːdʒ] – сливать, соединять. fill [fɪl] – заполнять. intersect [ɪntəˈsɛkt] – пересекать, перекрывать. pad [pæd] – блокнот, набивать, увеличивать. extract [ˈekstrækt] – извлекать, вытягивать. register [ˈrɛdʒɪstə] – регистрировать, отмечать, реестр, ведомость. entity [ˈɛntɪti] – сущность, существование. shut [ʃʌt] – закрывать. chunk [tʃʌŋk] – ломоть, большой кусок. split [splɪt] – расщеплять, раскалывать. implode [ɪmˈpləʊd] – интегрировать, концентрировать. explode [ɪkˈspləʊd] – взрывать, разрушать, разбивать. chop [tʃɒp] – рубить, крошить, нарезать. join [dʒɔɪn] – соединять, объединять. compare [kəmˈpɛː] – сравнивать. convert [kənˈvɜːt] – конвертировать, перестраивать, переоборудовать. handler [ˈhandlə] – обработчик. internal [ɪnˈtəːn(ə)l] – внутренний. encoding [ɪnˈkəʊdɪŋ] – кодировка, кодирующий. send [send] – посылать, передавать. cut [kʌt] – резать, разрезать, порез. alias [ˈeɪlɪəs] – кличка, прозвище, другое имя. match [mætʃ] – искать соответствие, соответствовать, спичка. floor [flɔː] – пол, дно. ceil [siːl] – потолок. round [raʊnd] – круглый, округлять. pow [paʊ] – башка. |

