Лекция 11: Функции и массивы в PHP
Изучаемые вопросы
1. Функции, определяемые пользователем
Возврат значений функцией Пример: вычисление налога:
Рекурсивные функции Пример вычисления факториала:
Функции-переменные (variable functions)
Построение библиотек функций
2. Массивы
Операции с массивами
Сравнение массивов
Функция count
Функция in_array
Функция array_search
Функция array_keys
Функция array_unique
Сортировка массивов Функция sort
Функции asort, rsort, arsort
Сортировка массива по ключам
Сортировка с помощью функции, заданной пользователем
Применение функции ко всем элементам массива
Выделение подмассива  Функция array_slice
Функция array_chunk
Сумма элементов массива
219.00K
Category: programmingprogramming

Функции и массивы в PHP. (Лекция 11)

1. Лекция 11: Функции и массивы в PHP

2. Изучаемые вопросы

1. Функции, определяемые пользователем
2. Массивы

3. 1. Функции, определяемые пользователем

function имя_функции ($параметр1, $параметр2, ....
$параметрn)
{
тело функции
}
Например:
function display_copyright($site_name)
{
print "Copyright © 2015
$site_name. All Rights Reserved.";
}

4. Возврат значений функцией Пример: вычисление налога:

$price = 24.99; $tax = .06;
function calculate_cost($tax, $price)
{
$sales_tax = $tax;
return $price + ($price * $sales_tax);
}
$total_cost = calculate_cost ($tax,
$price);
// Округлить цену до двух десятичных цифр.
$total_cost = round($total_cost, 2);
print "Total cost: $".$total_cost;

5. Рекурсивные функции Пример вычисления факториала:

<?php
function fact($n)
{
if($n==0) $fact=1;
else $fact = $n * fact($n-1);
return $fact = $n * fact($n-1);
}
echo ”fact=”.fact(5);
?>

6. Функции-переменные (variable functions)

$имя_функции( );
function french( ) {
print "Bienvenue sur PHP Recipes.";
}
function english( ) {
print "Welcome to PHP Recipes.";
}
$language = "french":
$language( );

7. Построение библиотек функций

<?
// Файл: array_sorting.inc
// Назначение: библиотека функций для сортировки массивов.
function merge_sort($array, $tmparray, $right, $left) {
...
}
function bubble_sort($array, $n) {
...
}
function quicksort ($array, $right, $left) {
...
}
?>

8.

include(путь/имя_файла);
require( путь/имя_файла );
или
include " путь/имя_файла";
require " путь/имя_файла";

9. 2. Массивы

$array_name = array("key1"=>"value1",
"key2"=>"value2");
$array_name["key1"] = value1;
<?php
$del_items = array("10"=>"Наука и
жизнь", "12"=>"Информатика");
$del_items["13"] = "Программирование
на Php";
?>

10. Операции с массивами

<?php
$a = array("и"=>"Информатика",
"м"=>"Математика");
$b = array("и"=>"История", "м"=>"Биология",
"ф"=>"Физика");
$c = $a + $b;
$d = $b + $a;
print_r($c);
// получим: Array([и]=>Информатика
[м]=>Математика [ф]=>Физика)
print_r($d);
// получим: Array([и]=>История [м]=>Биология
[ф]=>Физика)
?>

11. Сравнение массивов

<?php
$a = array("и"=>"Информатика",
"м"=>"Математика");
$b = array("м"=>"Математика",
"и"=>"Информатика");
if ($a == $b) echo "Массивы равны и";
else echo "Массивы НЕ равны и ";
if ($a === $b) echo " эквивалентны";
else echo " НЕ эквивалентны";
// получим echo "Массивы равны и НЕ
эквивалентны"
?>

12. Функция count

<?php
$del_items = array("langs" =>
array("10"=>"Python", "12"=>"Lisp"),
"other"=>"Информатика");
echo count($del_items)."<br>";
// выведет 2
echo count($del_items,
COUNT_RECURSIVE);
// выведет 4
?>

13. Функция in_array

in_array("искомое значение", "массив",
["ограничение на тип"]);
<?php
$langs = array("Lisp", "Python", array("PHP",
"Java"), "Perl");
if (in_array("Java", $langs)) echo "Надо бы
изучить Java<br>»;
if (in_array("java", $langs)) echo "Надо бы
изучить java<br>";
if (in_array(array("PHP", "Java"), $langs))
echo "Надо бы изучить PHP и Java<br>";
?>

14. Функция array_search

array_search("искомое значение", "массив",
["ограничение на тип"]);
<?php
$langs = array("Lisp", "Python", "Java", "PHP",
"Perl");
if (!array_search("PHP", $langs)) echo "Надо бы
изучить PHP<br>";
else
{
$k = array_search("PHP", $langs);
echo "PHP изучен $k – м";
}
?>

15. Функция array_keys

array_keys ("массив", ["значение для поиска"]);
<?php
$langs = array("Lisp", "Python", "Java", "PHP",
"Perl", "Lisp");
$lisp_keys = array_keys($langs, "Lisp");
echo "Lisp входит в массив ".count($lisp_keys)."
раза:<br>";
foreach ($lisp_keys as $val) echo "- под номером
$val<br>";
?>
Lisp входит в массив 2 раза:
- под номером 0
- под номером 5

16. Функция array_unique

<?php
$langs = array("Lisp", "Java",
"Python", "Java", "PHP", "Perl",
"Lisp");
print_r(array_unique($langs));
?>
Array ( [0] => Lisp [1] => Java [2]
=> Python [3] => PHP [4] => Perl )

17. Сортировка массивов Функция sort

sort (массив [, флаги]);
<?php
$items = array(10 => "хлеб", 20 => "молоко",
30 => "бутерброд");
sort($items); print_r($items);
$rev_items = array("хлеб" => 10, "бутерброд"
=> 30, "молоко" => 20);
sort($rev_items);print_r($rev_items);
?>
Результат:
Array ( [0] => бутерброд [1] => молоко [2] =>
хлеб )
Array ( [0] => 10 [1] => 20 [2] => 30 )

18.

•SORT_REGULAR – сравнивать элементы
массива обычным образом;
•SORT_NUMERIC – сравнивать элементы
массива как числа;
•SORT_STRING – сравнивать элементы
массива как строки.

19. Функции asort, rsort, arsort

asort (массив [, флаги])
rsort (массив [, флаги])
arsort(массив [, флаги])
<?php
$books = array("Пушкин"=>"Руслан и Людмила",
"Толстой"=>"Война и мир", "Лермонтов"=>"Герой нашего
времени");
asort($books);
print_r($books);echo "<br>";
rsort($books);
print_r($books);
?>
Результат:
Array ( [Толстой] => Война и мир
[Лермонтов] => Герой нашего времени
[Пушкин] => Руслан и Людмила )
Array ( [0] => Руслан и Людмила
[1] => Герой нашего времени
[2] => Война и мир )

20.

Задание: изменять порядок отображения элементов по желанию
пользователя
<form action=task.php>
<table border=1>
<tr>
<td>Название: </td>
<td><input type=text name=title size=5></td></tr>
<tr>
<td>Краткое содержание: </td>
<td><input type=text name=description size=5></td>
</tr>
<tr>
<td>Автор: </td>
<td><input type=text name=author size=5></td>
</tr>
<tr>
<td>Дата публикации: </td>
<td><input type=text name=published size=5></td>
</tr>
</table>
<input type=submit value="Отправить">
</form>

21.

<?php
print_r($_GET); echo "<br>";
// сортируем массив в обратном
порядке, сохраняя ключи
arsort ($_GET);
print_r($_GET);
echo "<br>";
// составляем новый массив
$ordered_names = array_keys($_GET);
// выводим элементы нового массива
foreach($ordered_names as $key =>
$val) echo "$key :$val <br>";
?>

22. Сортировка массива по ключам

<?php
$books = array("Пушкин"=>"Руслан и Людмила",
"Толстой"=>"Война и мир", "Лермонтов"=>"Герой
нашего времени");
ksort($books); // сортируем массив, сохраняя
значения ключей
print_r($books);
?>
Результат:
Array ( [Лермонтов] => Герой нашего времени
[Пушкин] => Руслан и Людмила
[Толстой] => Война и мир )

23. Сортировка с помощью функции, заданной пользователем

usort (массив, сортирующая функция);
uksort (массив, сортирующая функция);
<?php
$books = array(
"Герой нашего времени" => array ("Лермонтов", 1840),
"Руслан и Людмила" => array("Пушкин",1820),
"Война и мир" => array ("Толстой",1863),
"Идиот" => array("Достоевский",1868));
uasort($books, "cmp");
foreach ($books as $key => $book) echo "$book[0]: \"$key\"<br>";
function cmp($a, $b){
if ($a[1] < $b[1]) return -1;
elseif ($a[1]==$b[1]) return 0;
else return 1;
}
?>
Пушкин: "Руслан и Людмила"
Лермонтов: "Герой нашего времени"
Толстой: "Война и мир"
Достоевский: "Идиот"

24. Применение функции ко всем элементам массива

array_walk(массив, функция [, данные]
<?php
$books1 = array(
"А.С. Пушкин"=>"Руслан и Людмила",
"Л.Н. Толстой"=>"Война и мир",
"М.Ю. Лермонтов"=>"Герой нашего времени");
function try_walk($val,$key,$data)
{
echo "$data \"$val\" написал $key<br>";
}
array_walk($books1,"try_walk","Роман");
?>
Результат работы скрипта:
Роман "Руслан и Людмила" написал А.С. Пушкин
Роман "Война и мир" написал Л.Н. Толстой
Роман "Герой нашего времени" написал М.Ю. Лермонтов

25.

<?php
$books1 = array(
"А.С. Пушкин"=>"Руслан и Людмила",
"Л.Н. Толстой"=>"Война и мир",
"М.Ю. Лермонтов"=>"Герой нашего времени");
function try_walk(&$val,$key)
{
$key = "<p>Автор: " .$key ."<br>";
$val = "Название: \"" . $val ."\"</p>";
echo $key.$val;
}
array_walk($books1,"try_walk");
print_r($books1);
?>
Результат работы скрипта:
Автор: А.С. Пушкин
Название: "Руслан и Людмила"
Автор: Л.Н. Толстой
Название: "Война и мир"
Автор: М.Ю. Лермонтов
Название: "Герой нашего времени"
Array ( [А.С. Пушкин] => Название: "Руслан и Людмила"
[Л.Н. Толстой] => Название: "Война и мир"
[М.Ю. Лермонтов] => Название: "Герой нашего времени")

26. Выделение подмассива  Функция array_slice

Выделение подмассива
Функция array_slice
array_slice (массив, номер_элемента [, длина]);
<?php
$arr = array(1, 2, 3, 4, 5);
$sub_arr = array_slice($arr, 2);
print_r($sub_arr);
/* выведет Array ( [0] => 3
[1] => 4
[2] => 5 )*/
$sub_arr = array_slice($arr,-2);
print_r($sub_arr);
// выведет Array ( [0] => 4 [1] => 5 ),
?>

27.

<?php
$arr = array(1, 2, 3, 4, 5);
$sub = array_slice($arr, 2, 2);
$sub1 = array_slice($arr,-3, 2);
$sub2 = array_slice($arr,0, -1);
$sub3 = array_slice($arr,-4, -2);
?>

28. Функция array_chunk

array_chunk ( массив, размер [, сохранять_ключи]);
<?php
$persons = array("Иванов", "Петров", "Сидорова", "Зайцева",
"Волкова");
$triples = array_chunk($persons,3);
foreach ($triples as $k => $table)
{
echo "За столиком номер $k сидят:<ul>";
foreach ($table as $pers) echo "<li>$pers"</li>;
echo "</ul>";
}
?>
Результат:
за столиком номер 0 сидят:
• Иванов
• Петров
• Сидорова
за столиком номер 1 сидят:
• Зайцева
• Волкова

29. Сумма элементов массива

<?php
$arr = array(2, 1, 3, 4, 5, 6, 4);
foreach ($arr as $k => $val)
{
$p = $k + 1;
$out_next = array_slice($arr, $p);
$out_prev = array_slice($arr, 0, $k);
$next_sum = array_sum($out_next);
$prev_sum = array_sum($out_prev);
if ($next_sum == $prev_sum) echo "value:$val";
// можно посмотреть, что представляют собой
// рассмотренные массивы на каждом шаге
// print_r($out_next); echo "<br>";
// print_r($out_prev);
// echo "$next_sum, $prev_sum<br>";
echo "<hr>";
}
?>
English     Русский Rules