1. Строки и числа
Строки
Размер строк в PHP ограничивается только объемом памяти доступной интерпретатору php.
4 способа вывода строк: одинарные ковычки (‘), двойные кавычки (“), heredoc и nowdoc.
Рассмотрим работу одинарных кавычек.
Одинарные ковычки. Листинг 1.1 |
$string1 = ‘hello world’; $string2 = ‘hello ’ .$name; $string3 = 'hello ' .$name. ’!’; $string4 = ‘I\’ve gone to the store’; $price = ‘$250’ // знак $ читается как знак доллара |
В двойных ковычках знак доллара читается как знак переменной. Экранированные двойные кавычки не распознаются. В двойных кавычках проверяется интерполяция переменных и служебные комбинации.
Двойные кавычки. Листинг 1.2 |
$string1 = “hello world”; $string2 = “hello “ .$name; $string3 = “hello “ .$name. “!”; $price = “$var” // знак $ читается как символ переменной. |
Строки в формате heredoc поддерживают все интерполяции и служебные команды, в чем его поведение схоже с поведением двойных кавычек, но не требуют экранирования символов двойной кавычки.
Формат heredoc. Листинг 1.3 |
print <<< END Это строки, в которой могут быть любые ковычки. И двойные (“) и одинарные (‘). А также любое количество абзацев. $var - переменная END; |
Конкатенация строк в формате heredoc
Конкатенация строк в формате heredoc. Листинг 1.4 |
$html = <<< END <div> END . $listen . ‘</div>’; Print $html |
Рассмотрим еще один пример интерполяции строк формата heredoc
Интерполяция строк в формате heredoc. Листинг 1.5 |
print <<< END Сегодня END . strftime(‘%c’) . <<< END Завтра END . strftime(‘%c’,time()+86400); |
Формат nowdoc похож на heredoc, но не поддерживает интерполяцию строк. Таким образом, формат heredoc связан с форматом nowdoc так же, как строки в одиночных кавычках со строками в двойных кавычках.
Формат nowdoc. Листинг 1.6 |
$js = <<<’JS’ $.ajax({ ‘url’:’ajax.php’ }) JS; print $js; |
Функции, работы со строками
strpos – поиск подстроки
substr – выделение подстрок
substr_replace – замена подстрок
strstr – поиск первого вхождения строки
strlen – возвращает количество байт в строке
strrev – обратная перестановка строки по словам или байтам
str_rand – генерирование случайной строки
ucfirst – преобразование первого символа строки в верхний регистр
ucwords – преобразование первой буквы каждого слова в верхний регистр
trim – удаление начальных или конечных пропусков в строке
fputcsv – формирование строки значений, разделенных запятыми
fopen – если данные хранятся в файле или доступны по url, откройте файл функцией fopen, и прочитайте данные функцией fgetcsv.
explode – разбиение строк на фрагменты (элементы массива)
implode – обратное действие функции explode, склейка фрагментов в строку.
wordwrap – перенос текста по заданной длине строки.
is_numeric – для проверки, является ли значение переменной числом. Функция работает как с целыми, так и с дробными числами (разделителем должна быть точка . )
floor – округление дробного числа в меньшую сторону
ceil – округление числа в большую сторону.
2. Массивы
Массив в PHP - это упорядоченное отображение, которое устанавливает соответствие между значением и ключом.
Массив определяется с помощью ключевого слова array либо, начиная с версии PHP 5.4, квадратными скобками.
Определение массива. Листинг 2.1 |
$array = array( "foo" => "bar", "bar" => "foo", );
// Начиная с PHP 5.4 $array = [ "foo" => "bar", "bar" => "foo", ]; |
Ключом массива назвается левая часть определения (то, что находится слева от символов “=>”). Значением массива назвают правую часть определения.
Ключом может быть либо строка, либо число. Если ключом является число, массив называют индексированным. Если ключом является строка, массив ассоциативный. Впрочем, PHP не делает разницы между индексированным и ассоциативным массивом.
Значения элементов массива могут содержать любые типы данных, в том числе и другой массив, в таком случае массив называют многомерным (двойным, тройным и т.д.)
Индексированные массивы можно определять без ключа:
Определение индексированного массива без ключа. Листинг 2.2 |
$arr = array("foo", "bar", "hello", "world");
|
Для вывода информации о массиве можно воспользоваться функциями print_r() или var_dump(), а также html-тэгом <pre></pre>, который нужен для удобного вывода массива (с отступами):
Вывод информации о массиве. Листинг 2.3 |
// использование print_r() echo “<pre>” print_r($arr); echo “</pre>” // использование var_dump() echo “<pre>” var_dump($arr); echo “</pre>” |
Для перебора элементов массива можно воспользоваться оператором foreach()
Получение всех значений массива. Листинг 2.4 |
foreach($arr as $one){ echo $one; echo “<br />”; } |
Для получения ключей и значений массива воспользуемся тем же foreach():
Получение всех значений и ключей массива. Листинг 2.5 |
foreach($arr as $key => $value){ echo $key . “ => ” . $value; echo “<br />”; } |
Для удаления элементов массива можно воспользоваться функцией unset().
Удаление элементов массива. Листинг 2.6 |
unset($arr[0]); unset($arr[1], $arr[5]); |
Чтобы удалить несколько смежных элементов массива, воспользуемся функцией array_splice()
Удаление нескольких смежных элементов массива. Листинг 2.7 |
array_splice($arr, $offcet, $length) |
Узнать количество элементов массива можно с помощью функции count(). Эту же функцию часто применяют для проверки массива на существование.
Использование функции count(). Листинг 2.8 |
if(count($arr)>0){ //массив $arr не пустой. } |
Слияние массивов.
Использование функции array_merge. Листинг 2.9 |
array_merge($arr, $arr2); array_merge($arr, array(‘more’)); array_unique(array_merge($arr, $arr2)); |
Для проверки ключа на существование можно воспользоваться функцией array_key_exists().
Проверка ключа на существование. Листинг 2.10 |
if(array_key_exists(‘key’, $arr)){ //$arr[‘key’] существует } |
Для проверки значения на существование, воспользуемя функцией in_array().
Проверка значение на существование. Листинг 2.11 |
if(in_array($value, $arr)){ // В массиве $arr имеется элемент со значением $value. } |
Существует множество встроенных функций по сортировке массива:
sort() – сортировка массива по возрастанию,
rsort() – сортировка массива по убыванию,
asort() – сортировка ассоциативного массива по возрастанию,
arsort() – сортировка ассоциативного массива по убыванию,
ksort() – сортировка массива по возрастанию ключей,
krsort() – сортировка массива по убыванию ключей,
array_reverse() – расстановка элементов массива в обратном порядке,
shuffle() – перемешивание элементов массива случайным образом,
natsort() – выполняет "естественную" сортировку массива.
Пример использования
Сортировка массива по возрастанию. Листинг 2.12 |
$arr = array("2", "1", "4", "3","5"); sort($arr); for($i=0; $i < count($arr); $i++) { echo ("$i:$arr[$i] "); } // выводит "0:1 1:2 2:3 3:4 4:5" |
Чтобы применить функцию к каждому элементу массива, можно воспользоваться функцией array_walk().
Применение функции для каждого элемента массива. Листинг 2.13 |
array_walk($arr, function(&$value, $key){
}); |
Рекурсивный перебор массива.
Рассмотрим еще одну функцию, которая проверяет входящие в нее данные. Если входит массив, то функция определяет значение элемента этого массива и рекурсивно вызывает саму себя. Если входящий параметр не массив, то выполнение функции останавливается и возвращается ответ.
Рекурсия. Листинг 2.14 |
<?php function xss($data) { if (is_array($data)) { // Если это массив $result = array(); // Создаём новый массив foreach ($data as $key => $value) { // Перебираем исходный массив $result[$key] = xss($value); // Рекурсивно вызываем функцию xss } return $result; // Возвращаемый "защищённый" массив } return htmlspecialchars($data, ENT_QUOTES); // Если это не массив, то вызываем htmlspecialchars() } $data = xss($_REQUEST); // Пример вызова функции ?> |