Расширения PHP, относящиеся к переменным и типам
http://belarusweb.net
Основы создания сайтов

Расширения, относящиеся к переменным и типам

Как создавать переменные, какие виды переменых присутствуют в PHP и как приводить их к тому или иному типу мы уже знаем. Сейчас же приведем ряд примеров использования встроенных функций, которые позволяют значительно расширить возможности разработчиков по работе с переменными (см. пример №1).

По ходу просмотра примеров не пренебрегайте набором кода и обращением к официальному справочнику. Примеры большие, поэтому для лучшего восприятия разбивайте их на более мелкие и тестируйте на локальном сервере. В справочнике посетите соответствующие разделы и хотя бы ознакомьтесь с другими доступными функциями, чтобы в ходе практики вы знали, где вслучае необходимости их можно найти. После можете приступать к решению задач.

PHP Результат BwCodes
<?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>';
//Выведет array(2) { ["name"]=> string(4) "Dima" [0]=> int(11) }
var_dump($var_m); 
echo '<br><br><br>';


echo '-------- print_r() --------<br><br>';

//print_r() выводит удобочитаемую информацию о переменной
//Выведет 23.57
print_r($var_float); 
echo '<br>';
//Выведет apple
print_r($var_str);   
echo '<br>';
//Выведет Array ( [name] => Dima [0] => 11 )
print_r($var_m);      
echo '<br><br><br>';


echo '-------- is_int(), is_array(), is_bool() и т.д. --------<br><br>';

//is_int(), is_array(), is_bool() и аналогичные функции проверяют, относится
//ли переменная к данному типу. В случае успеха возвращает true, иначе false
//Выведет bool(true)
var_dump(is_int($var_int));    
echo '<br>';
//Выведет bool(false)
var_dump(is_string($var_int)); 
echo '<br>';
//Выведет bool(true)
var_dump(is_null($var_null));  
echo '<br><br><br>';


echo '-------- gettype() --------<br><br>';

//gettype() возвращает тип переменной: "boolen", "integer", "double", 
//"string", "array", "object", "resource", "NULL", "unknown type",
//Выведет integer
echo gettype($var_int).'<br>';       
//Выведет array
echo gettype($var_m).'<br><br><br>'; 


echo '-------- settype() --------<br><br>';

//settype() присваивает переменной новый тип,
//можно применять bool, int, float, string, array, object, null
//Выведет bool(true), преобразов. успешно
var_dump(settype($var_int, "string"));
echo '<br>';
//Выведет bool(true), преобразов. успешно
var_dump(settype($var_float, "bool"));
echo '<br><br><br>';


echo '-------- boolval() и аналогичные:<br><br>';

//boolval() возвращает логическое значение переменной  
//Также имеются функции strval(), intval(), floatval() 
//Выведет bool(true)
var_dump(boolval($var_str));  
echo '<br>';
//Выведет bool(false)
var_dump(boolval($var_null)); 
echo '<br><br><br>';


echo '-------- empty() -------- <br><br>';

//empty() проверяет, пуста ли переменная (переменная считается пустой, 
//если она не существует или её значение равно FALSE;
//Выведет bool(true), т.к. она еще не существует
var_dump(empty($a)); 
$a;
//Выведет bool(true), т.к. она еще не инициализирована
var_dump(empty($a)); 
$a=false;
//Выведет bool(true), т.к. false
var_dump(empty($a)); 
$a=null;
//Выведет bool(true), т.к. null
var_dump(empty($a)); 
echo '<br>';
//Во всех остальных случаях переменная считается не пустой и вернет false
//Выведет bool(false)
var_dump(empty($var_int)); 
//Выведет bool(false)
var_dump(empty($var_m));   
echo '<br><br><br>';


echo '-------- isset() -------- <br><br>';

//isset() определяет, была ли установлена переменная значением отличным 
//от NULL. Возвращает TRUE в случае успеха и FALSE в противном случае
//Выведет bool(false), т.к. она еще не существует
var_dump(isset($b)); 
$b;
//Выведет bool(false), т.к. она еще не инициализирована
var_dump(isset($b)); 
$b=null;
//Выведет bool(false), т.к. null
var_dump(isset($b)); 
echo '<br>';
//Во всех остальных случаях переменная считается установленной и вернет true
$b=false;
//Выведет bool(true)
var_dump(isset($b)); 
$b='';
//Выведет bool(true)
var_dump(isset($b)); 
$b=0;
//Выведет bool(true)
var_dump(isset($b)); 
$b=[];
//Выведет bool(true)
var_dump(isset($b)); 
echo '<br><br><br>';


echo '-------- unset() -------- <br><br>';

//unset() удаляет указанные переменные и не возвращает значения
unset($var_int, $var_m); 
//Тут выведет bool(true)
var_dump(empty($var_int)); 
//Тут выведет bool(true)
var_dump(empty($var_m));   

?>

Пример №1. Использование функций для работы с переменными

Если данные хранящиеся в переменной, например, в массиве, необходимо сохранить или передать между скриптами, их можно сериализовать:

  • serialize() – конвертирует переменную в строку, содержащую ее потоковое представление, которая может быть использована для хранения или передачи переменной между скриптами без потери типа и структуры (возвращает эту строку);
  • unserialize() – конвертирует сериализованную переменную обратно в значение PHP.

Использование функций serialize() и unserialize() показано в примере №2.

PHP Результат BwCodes
<?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);

?>

Пример №2. Использование сериализации данных

Функции для работы с массивами выделены в отдельный подраздел. Подробное описание, опять же, смотрите в официальном справочнике, мы же приведем порядка 15-20 примеров с краткими комментариями (см. пример №3).

PHP Результат BwCodes
<?php

//Создадим массивы с данными
$m_1=["1", 2, "three"];
$m_2=["one"=>1, 3, "city", false];
$m_3=[1, 1, "orange"];

echo '-------- count() --------<br><br>';

//count() подсчитывает количество элементов массива или что-то в объекте 
//и возвращает полученное число
//Выведет int(3)
var_dump(count($m_1)); 
echo '<br>'; 
//Выведет int(4)
var_dump(count($m_2)); 
echo '<br><br><br>';


echo '-------- in_array() --------<br><br>';

//in_array() проверяет, присутствует ли значение в массиве, и в 
//случае успеха возвращает true, иначе false
//Выведет bool(true)
var_dump(in_array(1, $m_1));       
echo '<br>';
//Зададим строгое соответствие
//Выведет bool(false)
var_dump(in_array(1, $m_1, true)); 
echo '<br><br><br>';


echo '-------- array_key_exists(), см. также array_keys() --------<br><br>';

//array_key_exists() проверяет (не строго), присутствует ли в массиве  
//указанный ключ, и в случае успеха возвращает true, иначе false
//Выведет bool(true)
var_dump(array_key_exists(1, $m_1));   
echo '<br>';
//Выведет bool(true)
var_dump(array_key_exists('1', $m_1)); 
echo '<br>';
//Выведет bool(false)
var_dump(array_key_exists(3, $m_1));   
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() добавляет один или несколько элементов в начало массива  
//и возвращает новое количество элементов в массиве 
//Выведет int(3)
var_dump(array_unshift($m_1, 4, 5));  
echo '<br>';
//Выведет array(3) {[0]=>int(4) [1]=>int(5) [2]=>int(2)} 
var_dump($m_1); 
echo '<br><br><br>';


echo '-------- array_push(), см. также array_pop() --------<br><br>';

//array_push() добавляет один или несколько элементов в конец массива  
//и возвращает новое количество элементов в массиве 
//Выведет int(5)
var_dump(array_push($m_1, "apple", 7)); 
echo '<br>';
//array(5){[0]=>int(4) [1]=>int(5) [2]=>int(2) [3]=>string(5) "apple" 
//[4]=>int(7)} 
//Т.е. массив имеет вид [4,5,2,"apple",7]
var_dump($m_1); 
echo '<br><br><br>';


echo '-------- array_slice() --------<br><br>';

//array_slice() выбирает часть массива в соответствии 
//с указанными параметрами и возвращает ее (сам массив остается прежним)
//Выведет array(2) {[0]=>int(4) [1]=>int(5)}, т.е. [4,5]
//2 символа с начала
var_dump(array_slice($m_1, 0, 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"]
//2 символа начиная с 3 позиции с конца
var_dump(array_slice($m_1, -3, 2));   
echo '<br>';
//array(3) {[0]=>int(5) [1]=>int(2) [2]=>string(5) "apple"}, т.е. 
//[5, 2, "apple"]
//Отсчет с конца до -1 позиции 
var_dump(array_slice($m_1, -4, -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)}
//Теперь $m_4==[1,5]
var_dump(array_splice($m_4, 1, 3)); 
echo '<br>';
//Выведет array(1) {[0]=>int(5)} (один удалили, а 4 добавили)
//Теперь $m_4==[1,6,7,8,9]
var_dump(array_splice($m_4, -1, 1, [6,7,8,9])); 
echo '<br>';
//Выведет array(1) {[0]=> int(7)} (удалили 1 элемент с -3 по -2 не включая)
//Теперь $m_4==[1,6,9]
var_dump(array_splice($m_4, -3, -2)); 
echo '<br>';
//Выведет array(4) {[0]=>int(1) [1]=>int(6) [2]=>int(8) [3]=>int(9)} 
//Теперь $m_4==[] (удалили с 0 и до конца)
var_dump(array_splice($m_4, 0)); 
echo '<br><br><br>';


echo '-------- array_product(), см. также array_sum() --------<br><br>';

//array_product() возвращает произведение значений массива 
$m_5=[1,2,3];
//Выведет int(6)
var_dump(array_product($m_5)); 
echo '<br><br><br>';


echo '-------- array_rand(), см. также shuffle () --------<br><br>';

//array_rand() выбирает одно или несколько случайных значений 
//из массива и возвращает их ключи 
//Вывело int(0) (случайный ключ массива)
var_dump(array_rand($m_5)); 
echo '<br><br><br>';


echo '-------- list() --------<br><br>';

//list() языковая конструкция, которая присваивает переменным из списка    
//значения из массива за одну операцию; возвращает присвоенный массив 
$m_10=[1,4,7];
//Присвоим значения массива переменным
list($d_1, $d_2, $d_3)=$m_10; 
//Выведет int(1) int(4) int(7) 
var_dump($d_1, $d_2, $d_3); 
echo '<br>';

list($d_4, list($d_5, $d_6), $d_7) = [1, [7, 9], "yes"];
//Выведет int(1) int(7) int(9) string(3) "yes" 
var_dump($d_4, $d_5, $d_6, $d_7);
echo '<br><br><br>';


echo 'sort(), см. также rsort(), usort(), uasort(), ksort(),<br>'. 
     'krsort(), uksort(), asort(), arsort(), natsort(),<br>'.
     'natcasesort(), array_multisort() и др. <br><br>';

//sort() сортирует массив и в случае успеха возвращает true, иначе false 
$m_6=[7,3,6];
//Выведет bool(true)
var_dump(sort($m_6)); 
echo '<br>';
//Выведет array(3) {[0]=>int(3) [1]=>int(6) [2]=>int(7)} 
var_dump($m_6); 
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];

//Выведет bool(true) 
var_dump(array_walk($m_9, "my_func_3")); 
echo '<br>';
//Выведет array(3) {[0]=>int(1) [1]=>int(3) [2]=>int(5)}
var_dump($m_9); 
echo '<br><br><br>';


//Также посмотрите функции сравнения массивов и работы с несколькими 
//массивами: array_intersect() и похожие, array_diff() и похожие, 
//array_merge() и др.

?>

Пример №3. Работа с массивами

Обратите также внимание на стандартные подразделы 'Управление функциями', 'Классы и объекты'.

Быстрый переход к другим страницам