J07AN

                CENSORED

                https://habr.com/post/285398/

## СБОРНИК ЗАГОТОВОК К ЗАДАЧАМ ПО PHP

1. Поправить ошибки в своем варианте.

variants.php

  <?php
    $a = array();
    
    while ( sizeof($a) < 150) {
      $n = rand(1,150);
      if ( !in_array( $n, $a)) array_push( $a, $n);
    }
    
    for ($r=1; $r<=30; $r++) {
      echo '['.$r.'] : ';
      for ($c=1; $c<=5; $c++)
        echo $a[5*($r-1)+$c].' ';
      echo PHP_EOL;
    }
  ?>

2. Прикрутить ввод чисел с верификацией

verif.php

  <?php
  function input() {
      return fgets(STDIN);
  }

  function v( $against) {
    $f = true;
    while ( $f) {
        $s = trim( input());
        if ( 1 == preg_match( $against, $s)) {
          echo "You entered : " . $s . PHP_EOL;
          $f = false;
        }
        else
          echo "No. Please repeat : " . PHP_EOL;
    }
    return $s;
  }

  # echo "Enter 0 or 1 : " . PHP_EOL;
  # echo "Got " . v('/^0|1$/') . PHP_EOL;

  echo "Enter number (not negative integer) : " . PHP_EOL;
  # allows: 0 or [1-9][0-9]*
  echo "Got " . v('/^(0|[1-9][0-9]*)$/') . PHP_EOL;

  echo "Enter integer : " . PHP_EOL;
  # allows: [+-?]number
  echo "Got " . v('/^[+-]?(0|[1-9][0-9]*)$/') . PHP_EOL;

  echo "Enter float : " . PHP_EOL;
  # allows: [+-?]number\.?[0-9]*((e|E)[+-]?number)?
  echo 
    "Got " . 
    v('/^[+-]?(0|[1-9][0-9]*)\.?[0-9]*((e|E)[+-]?(0|[1-9][0-9]*))?$/') .
    PHP_EOL;
  ?>

------------------------------------------------------------------------
Пример: Задача (1).

001.php

  <?php
  function input() {
      return fgets(STDIN);
  }

  function v( $against) {
    $f = true;
    while ( $f) {
        $s = trim( input());
        if ( 1 == preg_match( $against, $s)) {
          echo "Вы ввели : " . $s . PHP_EOL;
          $f = false;
        }
        else
          echo "Нет. Пожалуйста повторите ввод : " . PHP_EOL;
    }
    return $s;
  }

  echo "Введите A: "; $a = v('/^[+-]?(0|[1-9][0-9]*)$/');
  echo "Введите B: "; $b = v('/^[+-]?(0|[1-9][0-9]*)$/');
  $c = $a + $b; 
  $d = $a * $b; 
  echo "$a + $b = $c".PHP_EOL;
  echo "$a * $b = $d".PHP_EOL;
  ?> 

------------------------------------------------------------------------
Пример: Задача (26).

026.php

  <?php
    function input() {
        return fgets(STDIN);
    }

    function v( $against) {
      $f = true;
      while ( $f) {
          $s = trim( input());
          echo "You entered : " . $s . PHP_EOL;
          if ( 1 == preg_match( $against, $s)) {
            $f = false;
          }
          else
            echo "No $s. Please repeat : " . PHP_EOL;
      }
      return $s;
    }

  echo "Nick or Tom or Peter :"; $x = v('/Nick|Tom|Peter/'); 
  $arr = ['Nick'=>'1000$', 'Tom'=>'500$', 'Peter'=>'200$']; 
  echo $arr[$x];
  ?>
  
------------------------------------------------------------------------
Роман Игоревич Григорьев  
Задачник по PHP (с ошибками) 
 
SelfPub; 2018 

Аннотация 
 
Книга написана для начинающих программистов. Ко всем задачам есть решения. Присутствуют задачи повышенной сложности.

## Содержание

I.   Вычисления и условный оператор в PHP

  1.1 Простейшая арифметика
  1.2. Условный оператор
  1.3. Работа с формой

II.  Массивы в PHP

  2.1 Массивы
  2.2 Ассоциативные массивы
  2.3 Многомерные массивы

III. Задачи на if else, switch-case

IV.  Циклы foreach, while, for

V.   Строки в PHP

  5.1 Работа с регистром символов

    Работа с strlen
    Работа с substr
    Работа с str_replace
    Работа с strtr
    Работа с substr_replace
    Работа с strpos, strrpos
    Работа с explode, implode
    Работа с str_split
    Работа с trim, ltrim, rtrim
    Работа с strrev
    Работа с str_shuffle
    Работа с number_format
    Работа с str_repeat
    Работа с strip_tags и htmlspecialchars
    Работа с chr и ord
    Работа с strchr, strrchr
    Работа с strstr

  5.2 Применение строк в PHP

VI.  Задачи на анализ кода PHP

VII. Файлы в PHP

  7.1 Работа с файлами

IIX. Задачи на Cookie

IX.  Занимательные задачи

X.   Задачи на Session в PHP

XI.  MySQL и PHP задачи

 
# I. Вычисления и условный оператор в PHP
 
# 1.1 Простейшая арифметика 

(1) Даны два числа 5 и 7. Найти их сумму и произведение. 

u001.php

  <?php 
    $a = 5; 
    $b = 7; 
    $c = $a + $b; 
    $d = $a * $b; 
    echo "$a + $b = $c".PHP_EOL;
    echo "$a * $b = $d".PHP_EOL;
  ?> 

(2) Даны два числа 4 и 6. Найдите сумму их квадратов. 

u002.php

  <?php 
    $a = 4; 
    $b = 6; 
    $c = $a*$a + $b*$b; 
    echo $c; 
  ?> 

(3) Даны три числа 3, 5, 8. Найдите их среднее арифметическое. 

u003.php

  <?php 
    $a = 3; 
    $b = 5; 
    $c = 8; 
    $d = ($a + $b + $c)/3 
    echo $d; 
  ?> 

(4) Даны три числа x = 2,y = 6 и z = 9. Найдите (x+1)4−2(z−2x^2+y^2) 

u004.php

  <?php 
    $x = 2; 
    $y = 6; 
    $z = 9; 
    $a = ($x+1)*4 - 2*($z - 2*$x*$x+$y*$y); 
    echo $a 
  ?> 

(5) Даны три ненулевых числа $a = 4, $b = 8, $c = 3. Найдите всевозможные результаты деления суммы двух из них на оставшееся третье число.
 
u005.php

  <?php 
    $a = 4; 
    $b = 8; 
    $c = 3; 
    $d = ($a+$b)/$c; 
    $r = ($b+$c)/$a; 
    $f = ($a+$c)/$b; 
    echo "($a+$b)/$c = $d".PHP_EOL;
    echo "($b+$c)/$a = $r".PHP_EOL;
    echo "($a+$c)/$b = $f".PHP_EOL;
  ?> 

(6) Дано два числа 17 и 54. Найдите сумму 40% от первого числа и 84% от второго числа. 

u006.php

  <?php 
    $a = 17; 
    $b = 54; 
    $c = 0.4*$a + 0.84*$b; 
    echo "0.4*$a + 0.84*$b = $c".PHP_EOL; 
  ?> 

(7) Дано трехзначное числo. Найдите сумму его цифр. 

u007.php

  <?php 
    $var = 578;  // Объявляем число 
    $var .= '' ; // Приводим его к строковому типу 
    // Выводим переменную равную сумме цифр числа: 
    echo $a = $var[2] + $var[1] + $var[0]; 
  ?> 

# 1.2. Условный оператор 

(8) Дано число 15. Если оно больше 10, то увеличьте его на 100, иначе уменьшите на 30. 

u008.php

  <?php 
    $a = 15; 
    if ($a>10) $a = $a + 100; 
    else $a = $a - 30; 
    echo $a 
  ?> 

(9) Дано натуральное число 8. Если оно четное, то уменьшите его в 2 раза, иначе увеличьте в 3 раза. 

u009.php

  <?php 
    if ($number / 2 == ceil($number / 2)) $number = $number / 2; 
    else $number = $number *3; 
    echo $number; 
  ?> 

(10) Дано число. Если оно не меньше 50, то выведите квадрат этого числа, если же это число больше 10 и меньше 30, то выведите ноль, в остальных случаях выведите слово "Ошибка" 

u010.php

  <?php 
    $a = 45; // Задаем число $a, например, 45 
    if ($a >= 50) echo $b=pow($a,2); 
    elseif ($a > 10 & $a < 30) echo 0; 
    else echo "Ошибка"; 
    ?>

(11) Дано два числа $a = 15, $b = 4. Вывести наибольшее из них. 

u011.php

  <?php 
    $a = 15; 
    $b = 4; 
    if ($a > $b) echo $a; 
    else echo $b; 
  ?> 

(12) Дано два числа $a = 19, $b = 143. Вывести 'Да', если они отличаются на 100, иначе вывести 'Нет' 

u012.php

  <?php 
    $a = 19; 
    $b = 143; 
    if (abs($b - $a) != 100 ) echo "No"; 
    else echo "Yes"; 
  ?> 

(13) Дано два натуральных числа. Вывести 'Да', если они отличаются не более чем на 20, иначе вывести 'Нет'. 

u013.php

  <?php 
    $a = 15; 
    $b = 30; 
    if (abs($b - $a) > 20) echo "No"; 
    else echo "Yes"; 
  ?> 

(14) В данном трехзначном числе переставьте цифры так, чтобы новое число оказалось наибольшим из возможных.

u014.php

  <?php
  ?>

# 1.3. Работа с формой 

(15) Пользователь вводит номер дня недели. Вывести название дня недели. 

u015.php

  <?php
    $q = 4; 
    switch ($q) {
      case 1: echo "Monday"; break; 
      case 2: echo "Tuesday"; break; 
      case 3: echo "Wednesday"; break; 
      case 4: echo "Thursday"; break; 
      case 5: echo "Friday"; break; 
      case 6: echo "Saturday"; break; 
      case 7: echo "Sunday"; break; 
      default: echo "неверное число";
    }
    ?>

(16) Пользователь вводит свой возраст. Если он больше 80 лет, то вывести 'Здравствуйте, уважаемый', иначе 'Успехов!'. 

u016.php

  <?php 
    if (0 < $years && $years <= 80) 
        echo "Успехов"; 
    else 
        echo "Здравствуйте, Уважаемый"; 
  ?> 

(17) Пользователь выбирает из выпадающего списка страну (Турция, Египет или Италия), вводит количество дней для отдыха и указывает, есть ли у него скидка (чекбокс). Вывести стоимость отдыха, которая вычисляется как произведение количества дней на 400. Далее это число увеличивается на 10%, если выбран Египет, и на 12%, если выбрана Италия. И далее это число уменьшается на 5%, если указана скидка. 

u017.php

  <html> 
  <head> 
  <meta charset="utf-8" /> 
  <title>Название странички</title> 
  </head> 
  <body> 
   
  <?php 
    echo <pre>'; 
    print_r($_POST); 
    echo '</pre>'; 
    if (isset($_POST['hero'])) 
    { 
      if($_POST['hero'] == 1) 
      { 
        if(isset($_POST['b'])) 
        { 
          echo" в Италию со скидкой ". ($_POST['a']*400*1.12*0.95);} 
          else{echo" в Италию без скидки ". ($_POST['a']*400*1.12);} 
        } 
        elseif( $_POST['hero'] == 2) { 
          if(isset($_POST['b'])) { 
            echo" в Грецию со скидкой". ($_POST['a']*400*1.1*0.95);
          } 
          else {
            echo"Греция без скидкии".($_POST['a']*400*1.1);
          } 
        } 
        elseif($_POST['hero'] == 3) { 
          if(isset($_POST['b'])) { 
            echo" в Россию со скидкой". ($_POST['a']*400*0.95);
          } 
          else {
            echo"Poccия без скидкии".($_POST['a']*400);
          } 
        } 
      }
    } 
  ?> 
    <form method="post"> 

    <p><select name="hero"><option>выбирайте страну из списка </option> 
    <option value="1">Италия</option> 
    <option value="2">Греция</option> 
    <option value="3">Россия</option> 
    </select></p> 
    <p><b>сколько дней отдыха?</b></p> 
    <input type="text" name="a" /> 
    <p><b>есть ли у вас скидка?</b></p> 
    <input type="checkbox" name="option" value="b"><Br> 
    <p><input type="submit" value="Отправить"></p> 
    </form> 
    </body> 
    </html> 


## II.  Массивы в PHP 

#  2.1 Массивы 

(18) Дан массив с элементами 'Привет, ', 'мир' и '!'. Необходимо вывести на экран фразу 'Привет, мир!'. 

u018.php

  <?php 
    //Выведем фразу 'Привет, мир!': 
    $arr = ['Привет, ', 'мир', '!']; 
    echo $arr[0].$arr[1].$arr[2]; 
  ?> 

Слово 'Привет, ' хранится под номером 0, это значит, что для доступа к нему мы должны написать $arr[0]. 

Для доступа к слову 'мир' мы должны написать $arr[1], а $arr[2] содержит в себе '!'. Далее с помощью оператора 'точка' мы сложим три наши строки ('Привет, ', 'мир' и '!') в одну строку таким образом: $arr[0].$arr[1].$arr[2], и выведем на экран с помощью echo. 

(19) Задача. Решим немного другую задачу: дан массив с элементами 'Привет, ', 'мир' и '!'. Необходимо записать в переменную $text фразу 'Привет, мир!', а затем вывести на экран содержимое этой переменной. 

u019.php

  <?php 
    $arr = ['Привет, ', 'мир', '!']; 
    $text = $arr[0].$arr[1].$arr[2]; 
     /* В переменной $text теперь лежит строка 'Привет, мир!'. 
        Выведем ее на экран: */ 
    echo $text; 
  ?> 

(20) Дан массив ['Привет, ', 'мир', '!']. Необходимо записать в первый элемент (то есть элемент с номером ноль) этого массива слово 'Пока, ' (то есть вместо слова 'Привет, ' будет 'Пока, ' ).
 
u020.php

  <?php 
    $arr = ['Привет, ', 'мир', '!']; 
    $arr[0] = 'Пока, '; //перезапишем первый элемент массива 
    //посмотрим на массив и убедимся в том, что он изменился:
    var_dump($arr); 
  ?> 

(21) Дан массив с числами. Запишите в новый массив только те числа, в которых есть цифра 5. 

u021.php

  <?php 
   
    function getFives($sArr, String $sInt) { 
      $result = []; 
     
      foreach ($sArr as $item) 
        if (strpos(strval($item), $sInt) !== false) 
          $result[] = $item; 
      return $result; 
    } 
   
    $searchInt = 5; 
    $searchArr = [2,1,4,3,5,7,6,9,8,11,10,15,29,25,52,13,51]; 
    echo '<pre>'; 
    var_dump(getFives($searchArr, $searchInt)); 
    echo '</pre>'; 
    ?>

(22) Задача «Странный Массив». Создайте массив вида [1, [2], [[3]], [[[4]]] ], вместо 4 может быть любое целое значение. К примеру, если 5 - тогда будет массив [1, [2], [[3]], [[[4]]], [[[[5]]]] ]. 

u022.php

  <?php 
    function getMultiArray($level) { 
      $result = $level; 
      for ($i = 1; $i < $level; $i++) { 
        $result = [$result]; 
      } 
      return $result; 
    } 
   
    function strange($value) { 
      $result = []; 
      for ($i = 1; $i <= $value; $i++) { 
        $result[$i] = getMultiArray($i); 
      } 
      return $result; 
    } 

    print_r(strange(5)); 
  ?> 

(23) Задача Хитрое слияние массивов. 1: Напишите функцию, которая будет сливать два массива таким образом: из, к примеру, [1, 2, 3] и ['a', 'b', 'c'] она сделает [1, 'a', 2, 'b', 3, 'c']. 2: Сделайте аналогичную функцию, которая параметрами будет принимать не два массива, а произвольное количество (пусть функция параметром принимает двухмерный массив, где его подмассивы - это то, что мы будем сливать). 

u023.php

  <?php 
    function array_strange_merge(…$arrays) { 
      $maxLength = 0; 
      foreach ($arrays as $array) { 
        $maxLength = max(count($array), $maxLength); 
      } 
      $result = []; 
      for ($i = 0; $i < $maxLength; $i++) { 
        foreach ($arrays as $array) { 
          if (isset($array[$i])) { 
            $result[] = $array[$i]; 
          } 
        } 
      } 
      return $result; 
    } 

    print_r(array_strange_merge([1,2,3], ['a','b','c','d'])); 
   ?> 

(24) Дан массив вида [1, ' , 2, ' , ' , 3] - то есть в нем есть пустые строки. Удалите все такие элементы из этого массива.* 

u024.php

  <?php 
    $unCleanList = [1, ' , 2, ' , ' , 3]; 
    $filteredList = array_filter($unCleanList); 
    var_dump($filteredList); 
    array(3) { 
      [0]=>int(1) 
      [2]=>int(2) 
      [5]=>int(3) 
    } 
  ?> 

(25) Напишите функцию, которая корректно будет складывать часы и минуты. Примеры: на вход функции подается такое - 1ч20мин+50мин - в результатте функция выведет 2ч10мин.*** (Задача решается разными способами, приведите пример одного из них) 

u025.php

  <?php 
    function h2s($h) { 
    $h = $h/3600 % 24; 
    $h = $h % 10 ? "0".$h : $h; 
    $h = $h == 0 ? $h = "00" : $h; 
    return $h; 
    } 
    function m2s($m) { 
    $m = $m/60 % 60; 
    $m = $m % 10 ? "0".$m : $m; 
    $m = $m == 0 ? $m = "00" : $m; 
    return $m; 
    } 
    function s($s) { 
    $s = $s % 60; 
    $s = $s % 10 ? "0".$s : $s; 
    $s = $s == 0 ? $s = "00" : $s; 
    return $s; 
    } 
    function normal2seconds($normal) { 
    $hms = explode(":",$normal); 
    $h = $hms[0]*3600; 
    $m = $hms[1]*60; 
    $s = $hms[2]; 
    return $h+$m+$s; 
    } 
    function seconds2normal($seconds) { 
    $v = max($seconds,0); 
    $h = h2s($v); 
    $m = m2s($v); 
    $s = s($s); 
    return " $h:$m:$s"; 
    } 
    function timePlus() { 
    $times = func_get_args(); 
    for ($i=0;$i<count($times);$i++) { 
    $nowtime = explode(":",$times[$i]); 
    $time += normal2seconds(" $nowtime[0]:$nowtime[1]:$nowtime[2]");
    } 
    return seconds2normal($time); 
    } 
    echo timePlus("01:20:00","00:50:00"); 
  ?> 

2.2 Ассоциативные массивы 

(26) Создайте массив заработных плат $arr. Выведите на экран зарплату Коли. Решение: чтобы вывести зарплату Коли следует вывести значение элемента массива с ключом 'Коля' . Сделаем это:
 
u026.php

  <?php 
    $arr = ['Коля'=>'1000$', 'Вася'=>'500$', 'Петя'=>'200$']; 
    echo $arr['Коля']; //выведет 1000$ 
  ?> 

(27) Создайте массив $arr с элементами 1, 2, 3, 4, 5 двумя различными способами. 

Первый способ создать массив - объявить его через []: 

u027a.php

  <?php 
    $arr = [1, 2, 3, 4, 5]; 
  ?> 
    
Второй способ создания массива - это поступить таким образом:
 
u027b.php

  <?php 
    $arr[] = 1; 
    $arr[] = 2; 
    $arr[] = 3; 
    $arr[] = 4; 
    $arr[] = 5; 
  ?> 

(28) Создайте массив $arr. a =>1, b=>2, c=>3. Выведите на экран элемент с ключом 'b' . 

u028.php

  <?php 
    $arr = ['a'=>1, 'b'=>2, 'c'=>3]; 
    echo $arr['b']; 
  ?> 

(29) Создайте массив $arr. Найдите сумму элементов этого массива. 

    $arr = ['a' => 1, 'b' => 2, 'c' => 3]; 

u029.php

  <?php 
    $arr = ['a'=>1, 'b'=>2, 'c'=>3]; 
    echo $arr['a'] + $arr['b'] + $arr['c']; 
  ?>
 
(30) Создайте ассоциативный массив дней недели. Ключами в нем должны служить номера дней от начала недели (понедельник - должен иметь ключ 1, вторник - 2 и т.д.). Выведите на экран текущийдень недели.( например сегодня - четверг) Решение: пусть текущий день - четверг, тогда: 

u030.php

  <?php 
    $arr = [1=>'пн',2=>'вт',3=>'ср',4=>'чт',5=>'пт',6=>'сб',7=>'вс'];
    echo $arr[4]; 
  ?> 

(31) Пусть теперь номер дня недели хранится в переменной $day, например там лежит число 3. Выведите день недели, соответствующий значению переменной $day. 

u031.php

  <?php 
    //пусть текущий день - четверг, тогда: 
    $arr = [1=>'пн',2=>'вт',3=>'ср',4=>'чт',5=>'пт',6=>'сб',7=>'вс'];
    $day = 3; 
    echo $arr[$day]; 
  ?> 

  
# 2.3 Многомерные массивы 

(32) Дан многомерный массив 

    $arr = [ 
      'sp'=>['azul', 'rojo', 'verde'], 
      'en'=>['blue', 'red', 'green'], 
    ]; 

Выведите с его помощью слово 'azul' . 

u032.php

  <?php 
    $arr = [ 
    'sp'=>['azul', 'rojo', 'verde'], 
    'en'=>['blue', 'red', 'green'], 
    ]; 
    //так как массив многомерный 
    //(в нашем случае двухмерный), 
    //то придется написать несколько 
    //квадратных скобок подряд 
    var_dump($arr['sp']); 
    echo $arr['sp'][0]; //выведет 'azul' 
    echo $arr['sp'][1]; //выведет 'rojo' 
    echo $arr['en'][1]; //выведет 'red' 
  ?>

(33) Создайте массив $arr=['a', 'b', 'c']. Выведите значение массива на экран с помощью функции var_dump(). С помощью массива $arr из предыдущего номера выведите на экран содержимое первого, второго и третьего элементов. 

u033.php

  <?php 
    $arr = ['a', 'b', 'c']; 
    var_dump($arr) 
    $arr = ['a', 'b', 'c']; 
    echo $arr[0].'<br>'; 
    echo $arr[1].'<br>'; 
    echo $arr[2].'<br>'; 
  ?> 

(34) Создайте массив $arr=['a', 'b', 'c', 'd'] и с его помощью выведите на экран строку 'a+b, c+d' . 

u034.php

  <?php 
    $arr = ['a', 'b', 'c', 'd']; 
    echo $arr[0].'+'. $arr[1].', '.$arr[2].'+'.$arr[3]; 
  ?> 

(35) Создайте массив $arr с элементами 2, 8, 5, 3. Умножьте первый элемент массива на второй, а третий элемент на четвертый. Результаты сложите, присвойте переменной $a. Выведите на экран значение этой переменной. 

u035.php

  <?php 
    $arr = [2, 8, 5, 3]; 
    $a = $arr[0] * $arr[1] + $arr[2] * $arr[3]; 
    echo $a; 
  ?> 

(36) Заполните массив $arr числами от 1 до 5. Не объявляйте массив, а просто заполните его присваиванием $arr[] = новое значение. 

u036.php

  <?php 
    $arr[] = 1; 
    $arr[] = 2; 
    $arr[] = 3; 
    $arr[] = 4; 
    $arr[] = 5; 
    var_dump($arr); 
  ?> 

(37) Создайте ассоциативный массив массивов. $arr. 

    $arr = [ 
    'cms'=>['joomla', 'wordpress', 'drupal'], 
    'colors'=>['blue'=>'голубой','red'=>'красный','green'=>'зеленый']
    ] 

С его помощью выведите на экран слова 'joomla', 'drupal', 'verde', 'rojo’. 

u037.php

  <?php 
    $arr = [ 
    'cms'=>['joomla', 'wordpress', 'drupal'], 
    'colors'=>['blue'=>'azul', 'red'=>'rojo', 'green'=>'verde'] 
    ]; 
   
    echo $arr['cms'][0]; //joomla 
    echo $arr['cms'][2]  //drupal; 
    echo $arr['colors']['green']; //verde 
    echo $arr['colors']['red'];   //rojo 
  ?>

(38) Создайте ассоциативный массив массивов. Первые два ключа - это 'ru' и 'en' . Пусть первый ключ содержит элемент, являющийся массивом названий дней недели по-русски, а второй - по-английски. Выведите с помощью этого массива понедельник по-русски и среду по английски (пусть понедельник - это первый день). 

u038.php

  <?php 
    $arr = [ 
    'ru'=>[1=>'пн', 'вт', 'ср', 'чт', 'пт', 'сб', 'вс'], 
    'en'=>[1=>'mn', 'ts', 'wd', 'th', 'fr', 'st', 'sn'], 
    ]; 
    echo $arr['ru'][1]; //пн 
    echo $arr['en'][2]; //wd 
  ?> 

(39) Пусть теперь в переменной $lang хранится язык (она принимает одно из значений или 'ru', или 'en' - либо то, либо то), а в переменной $day - номер дня. Выведите словом день недели, соответствующий переменным $lang и $day. То есть: если, к примеру, $lang = 'ru' и $day = 3 - то выведем 'среда'.
 
u039.php

  <?php 
    $arr = [ 
    'ru'=>['пн', 'вт', 'ср', 'чт', 'пт', 'сб', 'вс'], 
    'en'=>['mn', 'ts', 'wd', 'th', 'fr', 'st', 'sn'], 
    ]; 
    $lang = 'ru'; 
    $day = 3; 
    echo $arr[$lang][$day]; //ср 
  ?> 

(40) Дан многомерный массив $arr. Напишите функцию, которая принимает строки вида 'строка1.строка2.строка3' - буквы разделенные точками, а возвращает элемент многомерного массива $arr['строка1']['строка2']['строка3']. Количество точек в строке может быть любым, вложенность массива тоже любая, ключи массива не содержат точек. *** 

u040.php

  <?php 
    function array_get($array, $key) { 
      $keys = explode('.', $key); 
      $result = $array; 
      while ($k = array_shift($keys)) { 
        if (empty($result[$k])) 
          throw new Exception('element '.$key.' found');
        $result = $result[$k]; 
      } 
      return $result; 
    } 
    echo array_get([1, 2, [1=>2, 2 => [1,5,3]]], '2.2.1'), PHP_EOL; 
    echo array_get([1, 2, 
             'table' => [1=>2, 'model' => 
                 [1, 'key' => 'cooool',3]]], 
             'table.model.key'), 
         PHP_EOL; 
  ?> 

(41) Дан многомерный массив. Уровни вложенности его подмассивов могут быть разными, например: 

    $arr = array( array( 1, 2, 3, 
    ), 
    array( 
    array(4, 5, array(6, 7, 7)), 9, 10, 
    ), ). 

Выведите на экран столбец всех его элементов.* 

u041.php

  <?php 
    $arr = array( 
    array( 
    1, 2, 3, 
    ), 
    array( 
    array(4, 5, array(6, 7, 8)), 9, 10, 8. ), 9. ); 
   
    $new = array(); 
    function sort_array($arr) { 
      foreach($arr as $value) { 
        if(!is_array($value)) { 
          echo $value."<br />"; 
        } else { 
          sort_array($value); 
        } 
      } 
    } 

    sort_array($arr); 
  ?> 

## III.  Задачи на if else, switch-case 

(42) Переменная $num может принимать одно из значений: 1, 2, 3 или 4. Если она имеет значение '1', то в переменную $result запишем 'зима', если имеет значение '2' - 'лето' и так далее. Решите задачу через switch-case. 

u042.php

  <?php 
    $num = 2; 
    switch ($num) { 
      case 1: 
        $result = 'зима'; 
        break; 
      case 2: 
        $result = 'весна'; 
        break; 
      case 3: 
        $result = 'лето'; 
        break; 
      case 4: 
        $result = 'осень'; 
        break; 
    } 
    echo $result; 
  ?> 

(43) В переменной $day лежит какое-то число из интервала от 1 до 31. Определите в какую декаду месяца попадает это число (в первую, вторую или третью). 

u043.php

  <?php 
    $day = 12; 
    if ($day <= 10) { 
      $decade = 1; 
    } 
    if ($day >= 11 and $day <= 20) { 
      $decade = 2; 
    } 
    if ($day >= 21 and $day <= 31) { 
      $decade = 3; 
    } 
    echo $decade; 
  ?> 

(44) В переменной $month лежит какое-то число из интервала от 1 до 12. Определите в какую пору года попадает этот месяц (зима, лето, весна, осень). 

u044.php

  <?php 
    $month = 6; 
    if ($month == 12 or $month == 1 or $month == 2) { 
      $result = 'Зима'; 
    } 
    if ($month >= 3 and $month <= 5) { 
      $result = 'Весна'; 
    } 
    if ($month >= 6 and $month <= 8) { 
      $result = 'Лето';
    }
    if ($month >= 9 and $month <= 11) { 
      $result = 'Осень'; 
    } 
    echo $result; 
  ?> 

(45) В переменной $year хранится год. Определите, является ли он високосным (в таком году есть 29 февраля). Год будет високосным в двух случаях: либо он делится на 4, но при этом не делится на 100, либо делится на 400. Так, годы 1700, 1800 и 1900 не являются високосными, так как они делятся на 100 и не делятся на 400. Годы 1600 и 2000 - високосные, так как они делятся на 400. 

u045.php

  <?php 
    $year = 2000; 
    if ($year % 4 == 0 or ($year % 400 == 0 and $year % 100 != 0)) { 
      echo 'Високосный'; 
    } else { 
      echo 'Не високосный'; 
    } 
  ?> 

(46) Дана строка с символами, например, 'abcde'. Проверьте, что первым символом этой строки является буква 'a'. Если это так - выведите 'да', в противном случае выведите 'нет'. 

u046.php

  <?php 
    $str = 'abcde'; 
    if ($str[0] == 'a') { 
      echo 'Да'; 
    } else { 
      echo 'Нет'; 
    } 
  ?> 

(47) Дана строка с цифрами, например, '12345'. Проверьте, что первым символом этой строки является цифра 1, 2 или 3. Если это так - выведите 'да', в противном случае выведите 'нет'. 

u047.php

  <?php 
    $str = '12345'; 
    if ($str[0] == '1' or $str[0] == '2' or $str[0] == '3') { 
      echo 'Да'; 
    } else { 
      echo 'Нет'; 
    } 
  ?> 

(48) Дана строка из 3-х цифр. Найдите сумму этих цифр. То есть сложите как числа первый символ строки, второй и третий. 

u048.php

  <?php 
    $str = '123'; 
    $result = $str[0] + $str[1] + $str[2]; 
    echo $result; 
  ?> 

(49) Дана строка из 6-ти цифр. Проверьте, что сумма первых трех цифр равняется сумме вторых трех цифр. Если это так - выведите 'да', в противном случае выведите 'нет'. 

u049.php

  <?php 
    $str = '123231'; 
    $sum1 = $str[0] + $str[1] + $str[2]; 
    $sum2 = $str[3] + $str[4] + $str[5]; 
    if ($sum1 == $sum2) { 
      echo 'Да'; 
    } else { 
      echo 'Нет'; 
    }
  ?> 

# IV.  Циклы foreach, while, for 

(50) Заполните массив 10-ю иксами с помощью цикла.
 
u050.php

  <?php 
    $arr = []; 
    for ($i = 1; $i <= 10; $i++) { 
      $arr[] = 'x'; 
    } 
    var_dump($arr); 
  ?> 

(51) Заполните массив числами от 1 до 10 с помощью цикла. 

u051.php

  <?php 
    $arr = []; 
    for ($i = 1; $i <= 10; $i++) { 
      $arr[] = $i; 
    } 
    var_dump($arr); 
  ?> 

(52) Заполните массив числами от 10 до 1 с помощью цикла. 

u052.php

  <?php 
    $arr = []; 
    for ($i = 10; $i > 0; $i-) { 
      $arr[] = $i; 
    } 
    var_dump($arr); 
  ?> 

(53) Выведите столбец чисел от 1 до 100. 

Задачу можно решить как циклом for, так и циклом while. Вначале решим через цикл while: 

u053a.php

  <?php 
    $i = 1; //счетчик цикла устанавливаем в 1 
    /* 
    С помощью оператора ++ увеличиваем $i 
    на единицу при каждом проходе цикла: 
    */ 
    while ($i <= 100) { 
      echo $i.'<br>'; //выведет 1,2… 100 
      $i++; 
    } 
  ?>
 
Решение через цикл for 

u053b.php

  <?php 
    /* 
    В начале цикла $i будет равно 1, 
    цикл будет выполнятся пока $i <= 100, 
    после каждого прохода к $i прибавляется единица: 
    */ 
    for ($i = 1; $i <= 100; $i++) { 
      echo $i.'<br>'; //выведет 1,2… 100 
    } 
  ?>
 
# Работа с foreach
 
(54) Дан массив с элементами 'html', 'css', 'php', 'js', 'jq'. С помощью цикла foreach выведите эти слова в столбик. 

u000.php

  <?php 
    $arr = ['html', 'css', 'php', 'js', 'jq']; 
    foreach ($arr as $elem) { 
      echo $elem.'<br>'; 
    } 
  ?> 

(55) Дан массив с элементами 1, 2, 3, 4, 5. С помощью цикла foreach найдите сумму элементов этого массива. Запишите ее в переменную $result. 

u055.php

  <?php 
    $arr = [1, 2, 3, 4, 5]; 
    $result = 0; 
    foreach ($arr as $elem) { 
      $result += $elem; 
    } 
    echo $result; 
  ?> 

(56) Дан массив с элементами 1, 2, 3, 4, 5. С помощью цикла foreach найдите сумму квадратов элементов этого массива. Результат запишите переменную $result. 

u056.php

  <?php 
    $arr = [1, 2, 3, 4, 5]; 
    $result = 0; 
    foreach ($arr as $elem) { 
      $result += $elem * $elem; 
    } 
    echo $result;
  ?>  

(57) Дан массив $arr. $arr = ['green'=>'зеленый', 'red'=>'красный','blue'=>'голубой']; С помощью цикла foreach выведите на экран столбец ключей и элементов в формате 'green - зеленый'. 

u057.php

  <?php 
    $arr = ['green'=>'зеленый', 'red'=>'красный','blue'=>'голубой']; 
    foreach ($arr as $key=>$elem) { 
      echo $key.' - '.$elem.'<br>'; 
    } 
  ?> 

(58) Дан массив $arr с ключами 'Коля', 'Вася', 'Петя' и с элементами '200', '300', '400'. С помощью цикла foreach выведите на экран столбец строк такого формата: 'Коля - зарплата 200 долларов.' 

u058.php

  <?php 
    $arr = ['Коля'=>'200', 'Вася'=>'300','Петя'=>'400']; 
    foreach ($arr as $key=>$elem) { 
      echo $key.' - зарплата '.$elem.' долларов<br>'; 
    } 
  ?> 

# V Строки в PHP 

5.1 Работа с регистром символов 

Для решения задач данного блока вам понадобятся следующие функции: strtolower, strtoupper, ucfirst,lcfirst, ucwords. 

(59) Дана строка 'php' . Сделайте из нее строку 'PHP' . 

u059.php

  <?php 
      echo strtoupper('php'); 
  ?> 

(60) Дана строка 'PHP' . Сделайте из нее строку 'php' .
 
u060.php

  <?php 
      echo strtolower('PHP'); 
  ?> 

(61) Дана строка 'london' . Сделайте из нее строку 'London' . 

u061.php

  <?php 
      echo ucfirst('london'); 
  ?> 

(62) Дана строка 'London' . Сделайте из нее строку 'london' . 

u062.php

  <?php 
      echo lcfirst('London'); 
  ?> 

(63) Дана строка 'london is the capital of great britain' . Сделайте из нее строку 'London Is The Capital Of Great Britain' . 

u063.php

  <?php 
      echo ucworlds('london is the capital of great britain'); 
  ?> 

(64) Дана строка 'LONDON' . Сделайте из нее строку 'London' . 

u064.php

  <?php 
      echo ucfirst(strtolower('LONDON'); 
  ?> 

# Работа с strlen
 
Для решения задач данного блока вам понадобятся следующие функции: strlen. 

(65) Дана строка 'html css php' . Найдите количество символов в этой строке. 

u065.php

  <?php 
      echo strlen('html css php'); 
  ?> 

(66) Дана переменная $password, в которой хранится пароль пользователя. Если количество символов пароля больше 5-ти и меньше 10-ти, то выведите пользователю сообщение о том, что пароль подходит, иначе сообщение о том, что нужно придумать другой пароль. 

u066.php

  <?php 
    $password = '123456789'; 
    $len = strlen($password); 
    if ($len > 5 and $len < 10) { 
      echo 'Пароль подходит'; 
    } else { 
      echo 'Пароль не подходит, придумайте другой'; 
    } 
  ?> 

# Работа с substr 

Для решения задач данного блока вам понадобятся следующие функции: substr 

(67) Дана строка 'html css php' . Вырежьте из нее и выведите на экран слово 'html', слово 'css' и слово 'php'. 

u067.php

  <?php 
    echo substr('html css php', 0, 4); //html 
    echo substr('html css php', 5, 3); //css 
    echo substr('html css php', 9, 3); //php 
  ?> 

(68) Дана строка. Вырежите и выведите на экран последние 3 символа этой строки. 

u068.php

  <?php 
    echo substr('123456789', -3); //789 
  ?> 

(69) Дана строка. Проверьте, что она начинается на 'http://' . Если это так, выведите 'да', если не так - 'нет'. 

u069.php

  <?php 
    $str = 'http://php.net'; 
    if (substr($str, 0, 7) == 'http://') { 
      echo 'Да'; 
    } else { 
      echo 'Нет'; 
    } 
  ?> 

(70) Дана строка. Проверьте, что она начинается на 'http://' или на 'https://' . Если это так, выведите 'да', если не так - 'нет'. 

u070.php

  <?php 
    $str = 'http://phphtml.net'; 
    $check1 = substr($str, 0, 7); 
    $check2 = substr($str, 0, 8); 
    if ($check1 == 'http://' or $check2 == 'https://') { 
      echo 'Да'; 
    } else { 
      echo 'Нет'; 
    }
  ?> 

(71) Дана строка. Проверьте, что она заканчивается на '.png' . Если это так, выведите 'да', если не так - 'нет'. 

u071.php

  <?php 
    $str = '1.png'; 
    $check = substr($str, -4); 
    if ($check == '.png') { 
      echo 'Да'; 
    } else { 
      echo 'Нет'; 
    } 
  ?> 

(72) Дана строка. Проверьте, что она заканчивается на '.png' или на '.jpg' . Если это так, выведите 'да', если не так - 'нет'. 

u072.php

  <?php 
    $str = '1.png'; 
    $check = substr($str, -4); 
    if ($check == '.png' or $check == '.jpg') { 
      echo 'Да'; 
    } else { 
      echo 'Нет';
    } 
  ?> 

(73) Дана строка. Если в этой строке более 5-ти символов - вырежите из нее первые 5 символов, добавьте троеточие в конец и выведите на экран. Если же в этой строке 5 и менее символов - просто выведите эту строку на экран. 

u073.php

  <?php 
    $str = '123456789'; 
    if(strlen($str) > 5) { 
      echo substr($str, 0, 5). '…'; 
    } else { 
      echo $str; 
    } 
  ?> 

# Работа с str_replace 

Для решения задач данного блока вам понадобятся следующие функции: str_replace. 

(74) Дана строка '31.12.2013' . Замените все точки на дефисы. 

u074.php

  <?php 
    echo str_replace('.', '-', '31.12.2013'); 
  ?> 

(75) Дана строка $str. Замените в ней все буквы 'a' на цифру 1, буквы 'b' - на 2, а буквы 'c' - на 3. 

u075.php

  <?php 
    //выведет '123123':
    echo str_replace(['a', 'b', 'c'], [1, 2, 3], 'abcabc'); 
  ?> 

(76) Дана строка с буквами и цифрами, например, ' 1a2b3c4b5d6e7f8g9h0'. 
Удалите из нее все цифры. То есть в нашем случае должна получится строка ' abcbdefgh'. 

u076.php

  <?php 
    echo str_replace([1, 2, 3, 4, 5, 6, 7, 8, 9, 0], ' ,
                     '1a2b3c4b5d6e7f8g9h0'); 
  ?> 

# Работа с strtr 

Для решения задач данного блока вам понадобятся следующие функции: strtr. 

(77) Дана строка $str. Замените в ней все буквы 'a' на цифру 1, буквы 'b' - на 2, а буквы 'c' - на 3. Решите задачу двумя способами работы с функцией strtr (массив замен и две строки замен). 

Первый способ: 

u077a.php

  <?php 
    $str = 'abcabc'; 
    echo strtr($str, ['a'=>1, 'b'=>'2', 'c'=>'3']); //выведет '123123'
  ?> 

Второй способ:
 
u077b.php

  <?php 
    $str = 'abcabc'; 
    echo strtr($str, 'abc', '123'); //выведет '123123' 
  ?> 

# Работа с substr_replace 

Для решения задач данного блока вам понадобятся следующие функции: substr_replace. 

(78) Дана строка $str. Вырежите из нее подстроку с 3-го символа (отсчет с нуля), 5 штук и вместо нее вставьте '!!!'.
 
u078.php

  <?php 
    $str = '1234567890'; 
    echo substr_replace($str, '!!!', 3, 5); //выведет '123!!!90' 
  ?> 

# Работа с strpos, strrpos
 
Для решения задач данного блока вам понадобятся следующие функции: strpos, strrpos. 

(79) Дана строка 'abc abc abc'. Определите позицию первой буквы 'b'. 

u079.php

  <?php 
    echo strpos('abc abc abc', 'b'); //выведет 1 
  ?> 

(80) Дана строка 'abc abc abc'. Определите позицию последней буквы 'b'. 

u080.php

  <?php 
    echo strrpos('abc abc abc', 'b'); //выведет 9 
  ?> 

(81) Дана строка 'abc abc abc'. Определите позицию первой найденной буквы 'b', если начать поиск не с начала строки, а с позиции 3. 

u081.php

  <?php 
    echo strpos('abc abc abc', 'b', 3); //выведет 5 
    ?>
 
(82) Дана строка 'aa aa aa aa'. Определите позицию второго пробела. 

u082.php

  <?php 
    $str = 'aa aa aa aa'; 
    $first = strpos($str, ' '); //позиция первого пробела 
    echo strpos($str, ' ', $first + 1); 
  ?> 

(83) Проверьте, что в строке есть две точки подряд. Если это так - выведите 'есть', если не так - 'нет'. 

u083.php

  <?php 
    $str = 'aaa..aaaa'; 
    if(strpos($str, '..') !== false) { 
    echo 'Да'; 
    } else { 
    echo 'Нет'; 
    } 
  ?> 

(84) Проверьте, что строка начинается на 'http://' . Если это так - выведите 'да', если не так - 'нет'. 

u084.php

  <?php 
    $str = 'http://phphtml.net'; 
    //Проверяем, что строка начинается с http://: 
    if(strpos($str, 'http://') === 0) { 
    echo 'Да'; 
    } else { 
    echo 'Нет'; 
    } 
  ?> 

# Работа с explode, implode 

Для решения задач данного блока вам понадобятся следующие функции: explode, implode. 

(85) Дана строка 'html css php' . С помощью функции explode запишите каждое слово этой строки в отдельный элемент массива 

u085.php

  <?php 
    $arr = explode(' ', 'html css php'); 
    var_dump($arr); 
  ?> 

(86) Дан массив с элементами 'html', 'css', 'php' . С помощью функции implode создайте строку из этих элементов, разделенных запятыми. 

u086.php

  <?php 
    $arr = ['html', 'css', 'php']; 
    echo implode(',', $arr); 
  ?> 

(87) В переменной $date лежит дата в формате '2016-12-31' . Преобразуйте эту дату в формат '31.12.2016' . 

u087.php

  <?php 
    $date = '2016-12-31'; 
    $arr = explode('-', $date); 
    echo $arr[2].'.'.$arr[1].'.'.$arr[0]; 
  ?> 

# Работа с str_split
 
Для решения задач данного блока вам понадобятся следующие функции: str_split. 

(88) Дана строка '1234567890' . Разбейте ее на массив с элементами '12', '34', '56', '78', '90' . 

u088.php

  <?php 
    var_dump(str_split('1234567890', 2)); 
  ?> 

(89) Дана строка '1234567890' . Разбейте ее на массив с элементами '1', '2', '3', '4', '5', '6', '7', '8', '9', '0' . 

u089.php

  <?php 
    var_dump(str_split('1234567890', 1)); 
  ?> 

(90) Дана строка '1234567890' . Сделайте из нее строку '12-34-56-78-90' не используя цикл. 

u090.php

  <?php 
    echo implode('-', str_split('1234567890', 2)); 
  ?> 

# Работа с trim, ltrim, rtrim
 
Для решения задач данного блока вам понадобятся следующие функции: trim, ltrim, rtrim. 

(91) Дана строка. Очистите ее от концевых пробелов. 

u091.php

  <?php 
    $str = ' строка '; 
    echo trim($str); 
  ?> 

(92) Дана строка '/php/' . Сделайте из нее строку 'php' , удалив концевые слеши. 

u092.php

  <?php 
    $str = '/php/'; 
    echo trim($str, '/'); 
  ?> 

(93) Дана строка 'слова слова слова.' . В конце этой строки может быть точка, а может и не быть. Сделайте так, чтобы в конце этой строки гарантировано стояла точка. То есть: если этой точки нет - ее надо добавить, а если есть - ничего не делать. Задачу решите через rtrim без всяких ифов.
 
u093.php

  <?php 
    $str = 'слова слова слова.'; 
    echo rtrim($str, '.').'.'; 
  ?> 

# Работа с strrev
 
Для решения задач данного блока вам понадобятся следующие функции: strrev. 

(94) Дана строка '12345' . Сделайте из нее строку '54321' . 

u094.php

  <?php 
    $str = '12345'; 
    echo strrev($str); 
  ?> 

(95) Проверьте, является ли слово палиндромом (одинаково читается во всех направлениях, примеры таких слов: madam, otto, kayak, nun, level).
 
u095.php

  <?php 
    $str = 'madam'; 
    $rev = strrev($str); 
    if ($rev == $str) { 
    echo $str. ' - это слово палиндром'; 
    } 
  ?> 

# Работа с str_shuffle
 
Для решения задач данного блока нужны функции: str_shuffle 

(96) Дана строка. Перемешайте символы этой строки в случайном порядке. 

u096.php

  <?php 
    $str = 'Hello World!'; 
    echo str_shuffle($str); 
  ?> 

(97) Создайте строку из 6-ти случайных маленьких латинских букв так, чтобы буквы не повторялись. Нужно сделать так, чтобы в нашей строке могла быть любая латинская буква, а не ограниченный набор. 

u097.php

  <?php 
    $str = 'qwertyuiopasdfghjklzxcvbnm'; //все латинские буквы 
    $newStr = str_shuffle($str); //перемешиваем их 
    echo substr($newStr, 0, 6); //берем первые 6 символов 
  ?> 

# Работа с number_format 

Для решения задач данного блока вам понадобятся следующие функции: number_format. 

(98) Дана строка '12345678' . Сделайте из нее строку '12 345 678' . 

u098.php

  <?php 
    $str = '12345678'; 
    echo number_format($str, 0, ' ', ' '); 
  ?> 

# Работа с str_repeat 

Для решения задач данного блока вам понадобятся следующие функции: str_repeat 

(99) Нарисуйте пирамиду, как показано на рисунке, только у вашей пирамиды должно быть 9 рядов, а не 5. Решите задачу с помощью одного цикла и функции str_repeat. x xx xxx xxxx xxxxx 

u099.php

  <?php 
    for ($i = 1; $i <= 9; $i++) { 
    echo str_repeat('x' , $i).'<br>'; 
    } 
  ?> 

(100) Нарисуйте пирамиду, как показано на рисунке. Решите задачу с помощью одного цикла и функции str_repeat. 

  1
  22 
  333 
  4444 
  55555 
  666666 
  7777777 
  88888888 
  999999999 

u100.php

  <?php 
    for ($i = 1; $i <= 9; $i++) { 
    echo str_repeat($i , $i).'<br>'; 
    } 
  ?> 

# Работа с strip_tags и htmlspecialchars
 
Для решения задач данного блока вам понадобятся следующие функции: htmlspecialchars, strip_tags. 

(101) Дана строка 'html, <b>php</b>, js' . Удалите теги из этой строки. 

u101.php

  <?php 
    echo strip_tags('html, <b>php</b>, js'); 
  ?> 

(102) Дана строка $str. Удалите все теги из этой строки, кроме тегов <b> и <i>. 

u102.php

  <?php 
    echo strip_tags($str, '<b><i>'); 
  ?> 

(103) Дана строка 'html, <b>php</b>, js' . Выведите ее на экран 'как есть' : то есть браузер не должен преобразовать <b> в жирный. 

u103.php

  <?php 
    echo htmlspecialchars('html, <b>php</b>, js'); 
  ?> 

# Работа с chr и ord 

Для решения задач данного блока вам понадобятся следующие функции: chr, ord. 

(104) Узнайте код символов 'a', 'b', 'c', пробела. 

u104.php

  <?php 
    echo ord('a'); 
    echo ord('b'); 
    echo ord('c'); 
    echo ord(' '); 
  ?>  

(105) Изучите таблицу ASCII. Определите границы, в которых располагаются буквы английского алфавита. 

u105.php

  <?php 
    echo ord(A); 
    echo ord(Z); 
    echo ord(a); 
    echo ord(z); 
  ?> 

(106) Выведите на экран символ с кодом 33. 

u106.php

  <?php 
    echo chr(33); 
  ?> 

(107) Запишите в переменную $str случайный символ - большую букву латинского алфавита. Подсказка: с помощью таблицы ASCII определите какие целые числа соответствуют большим буквам латинского алфавита.
 
u107.php

  <?php 
    $str = chr(rand(65, 90)); 
    echo $str; 
  ?> 

(108) Запишите в переменную $str случайную строку длиной $len, состоящую из маленьких букв латинского алфавита. Подсказка: воспользуйтесь циклом for или while.  

u108.php

  <?php 
    $str = '' ; 
    $len = 5; 
    for ($i = 1; $i <= $len; $i++) { 
    $str .= chr(rand(65, 90)); 
    } 
    echo $str; 
  ?> 

(109) Дана буква английского алфавита. Узнайте, она маленькая или большая. 

u109.php

  <?php 
    $str = 'А'; 
    $code = ord($str); 
    if ($code >= 65 and $code <= 90) { 
    echo 'большая буква'; 
    } 
    if ($code >= 97 and $code <= 122) { 
    echo 'маленькая буква'; 
    } 
    ?>
 
# Работа с strchr, strrchr 

Для решения задач данного блока вам понадобятся следующие функции: strchr, strrchr. 

(110) Дана строка 'ab-cd-ef' . С помощью функции strchr выведите на экран строку '- cd-ef' . 

u110.php

  <?php 
    $str = 'ab-cd-ef'; 
    echo strchr($str, '-'); 
  ?> 

(111) Дана строка 'ab-cd-ef' . С помощью функции strrchr выведите на экран строку '-ef' . 

u111.php

  <?php 
    $str = 'ab-cd-ef'; 
    echo strrchr($str, '-'); 
  ?> 

# Работа с strstr 

Для решения задач данного блока вам понадобятся следующие функции: strstr. 

(112) Дана строка 'ab-cd-ef' . С помощью функции strstr выведите на экран строку '-cd-ef' . 

u112.php

  <?php 
    $str = 'ab-cd-ef'; 
    echo strstr($str, '-'); 
  ?> 

# 5.2 Применение строк в PHP 

(113) Пользователь вводит названия городов через пробел. Переставьте названия так, чтобы названия были упорядочены по алфавиту. 

u113.php

  <? php 
    $text = "london Moskow NewYork"; 
    $cityes = explode(" ", $text); 
    sort($cityes); 
    $cityes = implode(", ", $cityes); 
    echo $cityes; 
  ?> 

(114) Преобразуйте строку 'var_test_text' в 'varTestText' . Скрипт, конечно же, должен работать с любыми аналогичными строками. 

u114.php

  <?php 
    $arr = explode('_', 'var_test_text'); 
    $str = ' ; 
    foreach ($arr as $key=>$elem) { 
    if($key != 0) { 
    $str .= ucfirst($elem); 
    } else { 
    $str .= $elem; 9. } 
    } 
    echo $str; 
  ?> 

(115) Дана строка следующего вида: 5 цифр, затем пробел, затем еще 5 цифр. Например, дана такая строка '12345 67890' . Сделайте из нее строку '54321 09876' . 

u115.php

  <?php 
    $str = '12345 67890'; 
    $arr = explode(' ', $str); 
    $arr[0] = strrev($arr[0]); 
    $arr[1] = strrev($arr[1]); 
    echo implode(' ', $arr); 
  ?> 

(116) Дан массив с числами. Выведите на экран все числа, в которых есть цифра 3.
 
u116.php

  <?php 
    $arr = [3, 11, 13, 31, 28, 34]; 
    foreach ($arr as $elem) { 
    if (strpos($elem, '3') !== false) { 
    echo $elem . '<br>'; 
    } 
    } 
  ?> 

(117) Дан массив с числами. Посчитайте суммарное количество цифр 3 в этих числах. 

u117.php

  <?php 
    $arr = [3, 11, 13, 31, 28, 34]; 
    $i = 0; 
    foreach ($arr as $elem) { 
    if (strpos($elem, '3') !== false) { 
    $i++; 
    } 
    } 
    echo 
  ?> 

(118) Дана строка с цифрами, например: '12345678'. Просуммируйте числа этой строки вот таким образом: 12+34+56+78. Строка, конечно же, может быть произвольной (но только с цифрами внутри) 

u118.php

  <?php 
    function sum_xx($str) 
    { 
    $array=str_split($str, 2); 
    echo array_sum($array)."<br/>"; 
    } 
    sum_xx("123456789"); 
    sum_xx("987654321"); 
  ?> 

(119) Дана строка вида /aaa/222/we33/qqq/. Сделайте функцию, которая заменит энный блок в такой строке на заданный текст. Пример: funct('/aaa/222/we33/qqq/', 2, '!') выдаст '/aaa/222/!/qqq/ - заменили второй блок (нумерация с нуля). 

u119.php

  <?php 
    function funct($my_string, $block_num, $symbol){ 
    $my_arr = explode("/", $my_string); 
    $my_arr[$block_num] = $symbol; 
    $my_string = implode("/", $my_arr); 
    return $my_string; 
    } 
  ?> 


## VI  Задачи на анализ кода PHP 

(120) Что будет показано в результате выполнения кода? 

u120.php

  <?php 
    $k=3; 
    for ($i=0; $i<10; $i++) 
    { 
    $k++; 
    if ($i>5) 
    { 
    $i++; 
    $k++; 
    } 
    } 
    echo $k; 
  ?> 

Ответ: 13
 
(121) Что будет показано в результате выполнения кода? 

u121.php

  <?php 
    $k=6; 
    for ($i=1; $i<10; $i+=2) 
    { 
    $k-; 
    if ($i>6) 
    { 
    $i--; 
    $k++; 
    } 
    } 
    echo $k; 
  ?> 

Ответ: 3 

(122) Что будет показано в результате выполнения кода?
 
u122.php

  <php 
    $k=3; 
    $s=0; 
    for ($i=10; $i>1; $i-) 
    { 
    $k++; 
    if ($i % 3 == 1) 
    { 
    $k-=2; 
    } 
    $s+=$k; 
    } 
    echo $s; 
  ?> 

Ответ: 36
 
(123) Что будет показано в результате выполнения кода?

u123.php

  <php 
    $p=1; 
    for ($i=0; $i<10; $i++) 
    { 
    $p++; 
    if ($i>5) 
    { 
    $i-; 
    echo $p; 
    } 
    if ($p>100) 
    { 
    break; 
    } 
    } 
  ?> 

Ответ: 8910…101
 
(124) Что будет показано в результате выполнения кода? 

u124.php

  <php 
    $a=array(); 
    for ($i=0; $i<5; $i++) 
    { 
    $a[]=$i+1; 
    } 
    echo array_sum($a); 
  ?> 

Ответ: 15 

(125) Что будет показано в результате выполнения кода? 

u125.php

  <?php 
    $i=1; 
    while($i<=5) 
    { 
    if($i%2==1) 
    { 
    echo $i.'<br>'; 
    } 
    else 
    { 
    echo $i*$i.'<br>'; 
    } 
    $i++; 
    } 
  ?> 

Ответ: 

  1 
  4 
  3 
  16 5 

(126) Что будет показано в результате выполнения кода? 

u126.php

  <?php 
    $i=1; 
    while($i<=4 || $i!=6) 
    { 
    echo $i.'<br>'; 
    $i++; 
    } 
  ?> 

Ответ: 

  1 
  2 
  3 
  4 
  5 

(127) Что будет показано в результате выполнения кода? 

u127.php

  <?php 
    for($i=0;$i<=5;$i++) 
    { 
    echo ($i+5).'<br>'; 
    if($i==0) 
    { 
    $i++; 
    } 
    } 
    ?>
 
Ответ: 

  5 
  7 
  8 
  9 
  10 

(128) Что будет показано в результате выполнения кода? 

u128.php

  <?php 
    $s=0; 
    for($i=0;$i<=5;$i++) 
    { 
    $s+=$i; 
    if($i==3) 
    { 
    $s+=100; 9. } 
    } 
    echo $s; 
  ?> 

Ответ: 115 

## VII Файлы в PHP 

7.1 Работа с файлами 

(129) Создайте файл 'test.txt' и запишите в него фразу 'Привет, мир!'. 

u129.php

  <?php 
    file_put_contents('test.txt', 'Привет, мир!'); 
  ?> 

(130) Считайте данные из файла 'test.txt' и выведите их на экран.
 
u130.php

  <?php 
    echo file_get_contents('test.txt'); 
  ?> 

(131) Переименуйте файл 'test.txt' в 'mir.txt'. 

u131.php

  <?php 
    echo rename('test.txt', 'mir.text'); 
  ?> 

(132) Сделайте папку 'folder'. 'test.txt' в 'mir.txt'. 

u132.php

  <?php 
    echo rename('test.txt', 'mir.text'); 
  ?> 

(133) Создайте копию файла 'mir.txt' и назовите ее 'world.txt'. 

u133.php

  <?php 
    copy(mir.txt, world.txt); 
  ?> 

(134) Определите размер файла 'world.txt'. Выведите его на экран. Выведите его в байтах, мегабайтах, гигабайтах. 

u134.php

  <?php 
    echo filesize('world.txt'); //байт 
    echo filesize('world.txt')/1024/1024; //мегабайт 
    echo filesize('world.txt')/1024/1024/1024; //гигабайт 
  ?> 

(135) Удалите файл 'world.txt'. 

u135.php

  <?php 
    unlink('world.txt'); 
  ?> 

(136) Проверьте существование файлов 'world.txt' и 'mir.txt'. 

u136.php

  <?php 
    if (file_exists('world.txt')) { 
    echo "Файл существует"; 
    } else { 
    echo "Файл не существует"; 
    } 
  ?> 

# Работа с папками, mkdir, rmdir 

(137) Создайте папку 'test'. 

u137.php

  <?php 
    mkdir('test'); 
  ?> 

(138) Переименуйте папку 'test' на 'www'.
 
u138.php

  <?php 
    rename('www'); 
  ?> 

(139) Удалите папку 'www'. 

u139.php

  <?php 
    rmdir('test','www'); 
  ?> 

(140) Дан массив со строками. Создайте в папке 'test' папки, названиями которых служат элементы этого массива. 

u140.php

  <?php 
    mkdir('test'); 
    $arr = ['qqq','eee','ddd']; 
    foreach($arr as $elem) { 
    mkdir('test/'.$elem); 
    } 
  ?> 

# На scandir, is_dir, is_file, PHP_EOL 

(141) Выведите на экран название всех файлов и подпапок из папки 'test'. 

u141.php

  <?php 
    var_dump(scandir('test')); 
  ?> 

(142) Выведите на экран название всех файлов, но не подпапок из папки 'test'.
 
u142.php

  <?php 
    $arr = []; 
    $dir = scandir('test'); 
    foreach($dir as $elem) { 
    if(is_file('test/'.$elem)) $arr []= $elem; 
    } 
    var_dump($arr); 
  ?> 

(143) В папке 'test' есть файлы и подпапки. Выведите на экран содержимое всех файлов, которые лежат непосредственно в папке 'test'. 

u143.php

  <?php 
    $arr = []; 
    $dir = scandir('test'); 
    foreach($dir as $elem) { 
    if(is_file('test/'.$elem)) $arr []= $elem; 
    } 
    var_dump($arr); 
  ?> 

(144) Выведите на экран название всех файлов с расширением txt из папки 'test'. 

u144.php

  <?php 
    $arr = []; 
    $dir = scandir('test'); 
    foreach($dir as $elem) { 
    if(is_file('test/'.$elem) and preg_match('#.txt$#',$elem)) 
      $arr []= $elem; 
    } 
    var_dump($arr); 
  ?> 

(145) Найдите все файлы из папки 'test' и вставьте в начало каждого файла полный путь к нему (текст файла должен остаться в нем и начинаться с новой строки после пути). 

u145.php

  <?php 
    $arr = []; 
    $dir = scandir('test'); 
    foreach($dir as $elem) { 
    if(is_file('test/'.$elem) and preg_match('#.txt$#',$elem)) { 
    $text_file = file_get_contents('test/'.$elem); 
    file_put_contents('test/'.$elem,'tesst/'.$elem.PHP_EOL.$text_file); 
    } 
    } 
  ?> 

(146) Выведите на экран имена всех папок из папки 'test' и их подпапок (может быть любой уровень вложенности). 

u146.php

  <?php 
    $arr = []; 
    function show_dir($dir_name) 
    { 
    $dir = scandir($dir_name); 
    unset( $dir[0], $dir[1] ); 
    foreach($dir as $elem) { 
    $str = $dir_name; 
    if(is_dir($dir_name.'/'.$elem)) { 
    $str .= '/'.$elem; 
    $arr [$elem]= show_dir($str); 
    } 
    } 
    return $arr; 
    } 
    var_dump(show_dir('test')); 
  ?> 

(147) Выведите на экран содержимое всех файлов из папки 'test' и ее подпапок (может быть любой уровень вложенности). 

u147.php

  <?php 
    $arr = []; 
    function show_dir($dir_name) 
    { 
    $dir = scandir($dir_name); 
    unset($dir[0], $dir[1]); 
    foreach($dir as $elem) { 
    $str = $dir_name; 
    if(is_file($dir_name.'/'.$elem)) { 
    $arr [$elem]= file_get_contents($dir_name.'/'.$elem); 
    } 
    if(is_dir($dir_name.'/'.$elem)) { 
    $str .= '/'.$elem; 
    $arr[$elem]= show_dir($str); 
    } 
    } 
    return $arr; 
    } 
    var_dump(show_dir('test')); 
  ?> 

(148) Найдите все файлы из папки 'test' и ее подпапок любого уровня вложенности и вставьте в начало каждого файла полный путь к нему (текст файла должен остаться в нем и начинаться с новой строки после пути). 

u148.php

  <?php 
    $arr = []; 
    function show_dir($dir_name) 
    { 
    $dir = scandir($dir_name); 
    unset($dir[0], $dir[1]); 
    foreach($dir as $elem) { 
    $str = $dir_name; 
    if(is_file($dir_name.'/'.$elem)) { 
    $text_file = file_get_contents($dir_name.'/'.$elem); 
    file_put_contents($dir_name.'/'.$elem,
    'tesst/'.$elem.PHP_EOL.$text_file); 
    $arr [$elem]= file_get_contents($dir_name.'/'.$elem); 
    } 
    if(is_dir($dir_name.'/'.$elem)) { 
    $str .= '/'.$elem; 
    $arr [$elem]= show_dir($str); 
    } 
    } 
    return $arr; 
    } 
    var_dump(show_dir('test')); 
  ?> 

(149) Найдите все файлы из папки 'test', в их содержимом найдите тег <h1>текст</h1>. Переименуйте все файлы на их h1. 

u149.php

  <?php 
    $dir = scandir('test'); 
    foreach($dir as $elem) { 
    if(is_file('test/'.$elem)) { 
    preg_match_all('#\<h1\>(.+)\</h1\>#',
        file_get_contents('test/'.$elem), $arr);
    rename('test/'.$elem, 'test/'.$arr[1][0].'.txt');
    } 
    } 
  ?> 

(150) Удалите из папки 'test' все файлы размером более 1мб. 

u150.php

  <?php 
    $dir = scandir('test'); 
    foreach($dir as $elem) { 
    if (is_file('test/'.$elem) and 
        filesize('test/'.$elem)/1024/1024 > 1) { 
      unlink('test/'.$elem); 
    } 
    } 
  ?> 

(151) Имеется папка с файлами, узнайте размер этой папки.

u151.php

  <?php 
    $dir = scandir('test'); 
    $sum = 0; 
    foreach($dir as $elem) { 
    if(is_file('test/'.$elem)) { 
    $sum += round(filesize('test/'.$elem)/1024/1024); 
    } 
    } 
    echo $sum.' мб'; 
  ?> 

(152) Имеется папка с подпапками, узнайте размеры всех подпапок папки и выведите их на экран. 

u152.php

  <?php 
    $sum = 0; 
    $arr = []; 
    function show_dir($dir_name) 
    { 
    $dir = scandir($dir_name); 
    unset($dir[0], $dir[1]); 
    foreach($dir as $elem) { 
    $str = $dir_name; 
    if(is_file($dir_name.'/'.$elem)) { 
    $sum += round(filesize($dir_name.'/'.$elem)/1024/1024); 
    }
    if(is_dir($dir_name.'/'.$elem)) { 
    $str .= '/'.$elem; 
    $arr [$elem]= show_dir($str); 
    } 
    } 
    return $sum; 
    } 
    echo show_dir('test'); 
  ?> 

## IIX Задачи на Cookie
 
(153) Задание 1 : Инициализируйте переменную для подсчета количества посещений. Если соответствующие данные передавались через cookie сохраняйте их в эту переменную. Нарастите счетчик посещений. Инициализируйте переменную для хранения значения последнего посещения страницы. Если соответствующие данные передавались из cookie , отфильтруйте их и сохраните в эту переменную. Установите соответствующие cookie 

u153

  <?php
  ..
  ?>

(154) Задание 2: Выводите информацию о количестве посещений и дате последнего посещения 

u154.php

  <?php 
    //инициализируем переменную для подрасчета 
    //количества посещений 
    // Если соответсвующие данные передавались через cookie 
    //сохраняем их в эту переменную 
    $visit_counter = 0; 
    if (isset($_COOKIE[‘visitCounter’]) && 
    is_numeric($_COOKIE[‘visitCounter’])){ 
    $visit_counter = $_COOKIE[‘visitCounter’]*1; 10. } 
    // Приращиваем счетчик посещений 12. $visit_counter++; 
   
    //Инициализруем переменную для хранения значения 
    //последнего посещения 
    //Если соответствующие данные передавались из cookie, 
    //сохраняем их в эту переменную 
    $last_visit = ‘’; 
    if (isset($_COOKIE[‘lastVisit’])){ 
    $last_visit=htmlspecialchars($_COOKIE[‘lastVisit’], 
    ENT_QUOTES); 
    $last_visit=stripslashes(trim($last_visit)); 
    } 
    //устанавливаем cookie 
    setcookie (‘visitCounter’, $visit_counter, 0x7FFFFFFF) ; 
    setcookie (‘lastVisit’, date (‘d/m/Y H:i:s’), 0x7FFFFFFF); 
    //Выводим информацию о количестве посещений 
    //и дате последнего посещения 
    if($visit_counter == 1) { 
    print ‘<h2>Добро пожаловать!</h2>’; 
    } else { 
    print <<<HTML 
    <h2> Вы здесь уже $visit_counter раз</h2> 
    <p>Последнее сообщение: $last_visit</p> 
    HTML; 
    } 
  ?> 

## IX Занимательные задачи 

(155) Написать функцию, которая преобразует строки вида var_php_test в varPhpTest.
 
u155.php

  <?php 
    function camelCase($ext){ 
    $start = microtime(true); 4. 
    $result = str_replace('_', ' ', $ext); 
    $result = ucwords($result); 
    $result2 = str_replace(' ', ' , $result); 
    $result2 = lcfirst($result2); 
   
    $end = microtime(true); 
    $res = $end - $start; 
    echo "<br/> Время выполнения php скрипта: ". 
         1000*$res . " миллисекунд "; 13. 
    return $result2; 
  ?> 

(156) Числа Фибоначи - это ряд чисел, в котором каждое последующее число равно сумме двух предыдущих чисел. Выведите на экран первые 100 чисел. 

u156.php

  <?php 
    $a = 0; 
    $b = 1; 
    echo $a."<br>".$b."<br>"; 
    for ($i=0; $i<=98; $i++) { 
    $c = $a+$b; 
    echo $c."<br>"; 
    $a = $b; 
    $b = $c; 
    } 
  ?> 

(157) Обрежьте длинную строку так, чтобы ее длина была не более N символов, при этом слова не должны быть разорваны - обрезание всегда проходит по пробелу и новая строка всегда меньше N. 

Пример: $n = 8; 

    $str = 'abcde abc abc abcde' => 'abcde <br>abc abc <br>abcde'; 

u157.php

  <?php 
    $var = 'He lo Wor ld'; 
    $strNotGap = substr($var, 0, 5); 
    $strNotGapRev = strrev($strNotGap); 
    preg_match('#\S*?\s?(.+)#', $strNotGapRev, $res); 
    $strGapRev = $res[1]; 
    $result = strrev($strGapRev); 
    var_dump($result); 
  ?> 

(158) Реализуйте треугольник Паскаля произвольного размера (должен нарисоваться в браузере).

u158.php

  <?php 
   
    function printArray($array, $tab) 
    { 
    $result = ""; 
    for($i=1;$i<=$tab;$i++) 7. $result.="."; 
   
    for($i=0;$i<count($array);$i++) 
    $result.=$array[$i]." "; 
    return $result."<br>"; 
    } 

    echo "Треугольник Паскаля<br><br>"; 

    $tab = 15; 
    $tri = array(1,array(1,1)); 18. 
    echo "................".$tri[0]."<br>"; 

    for($i=1;$i<15;$i++) 
    { 
    //Взятие последнего элемента 
    $last = $tri[count($tri)-1]; 

    //Вывод последнего элемента 
    echo printArray($last,$tab); 

    //Инициализация пустого массива 
    $added = array(); 

    /* 33. Инициализация элементов 
    */ 
    array_push($added,1); 
    for($j=0;$j<count($last)-1;$j++) 
    array_push($added, $last[$j]+$last[$j+1]); 
    array_push($added,1); 

    // Добавление сформированного массива 
    array_push($tri,$added); 

    //Уменьшение отступа 
    $tab--; 
    } 
    ?>
 
(159) Напишите функцию, которая определяет пол по ФИО.
 
u159.php

  <?php 
    function gender($fio){
      if($fio){return substr($fio, -2)=='ич'?'male':'female';}} 
  ?> 

(160) Сделайте функцию, которое будет принимать 2 числа, а возвращать их НОК - наименьшее общее кратное. НОК двух чисел - это самое маленькое число, которое делится и на одно, и на второе число. Пример: числа 12 и 15 имеют НОК 60. Число 60 делится и на 12, и на 15 и это самое минимальное такое число. 

u160.php

  <?php 
    function(x,y) { 
    var x = ~~x; 
    var y = ~~y; 
    var i = 1; 
    while ((i % x == 0 ) && ( i % y == 0)) { i++} 
    return i; 
    } 
  ?> 

(161) Напишите функцию, которая находит разницу между двумя датами в годах, месяцах, днях, минутах, часах, секундах. Функция принимает две даты в формате 2017-12-31T12:59:59, а возвращает ассоциативный массив с ключами (год, месяц … секунда). 

u161.php

  <?php 
    function diffdate($d1, $d2){ 
    $dsp = preg_split('#[-T:]#', $d2); 
    $diff = '-'.$dsp[0].'years, '-'.$dsp[1].'months, '-'.$dsp[2].'days,
      '-'.$dsp[3].'hours, '-'.$dsp[4].'minutes, '-'.$dsp[5].'seconds'; 
    $date = date_create($d1); 
    date_modify($date, $diff); 
    return date_format($date, 'Y-m-d\TH:i:s'); 
    } 
    var_dump(diffdate('2016-12-30T16:12:59', '2015-01-29T15:11:04')); 
   ?> 

(162) Реализуйте функцию flatten, которая в случае, если массив обладает уровнями вложенности, приведёт его к элементарному виду (вложенность может быть любой глубины). 

Пример: flatten([1, [2], [3, [[[4]]]]]) вернёт [1, 2, 3, 4]. 

u162.php

  <?php 
    function array_flatten($array) { 
    $result = []; 
    array_walk_recursive($array, function($element) use (&$result) { 
    $result[] = $element; 
    }); 
    return $result; 
    } 
    print_r(array_flatten([1, [2], [3, [[[4]]]]])); 
  ?> 

(163) Дана папка с файлами и подпапками, в подпапках могут быть свои подпапки и файлы и так далее. Выведите на экран пути ко всем файлам, расположенных в этих папках. Пример: папка root, в ней файл test.php и папка folder, значит путь к файлу test будет такой: /root/test.php. Если в folder есть файл subtest.php, то путь к нему будет /root/folder/subtest.php. Папки могут иметь любой уровень вложенности. 

u163.php

  <?php 
    $path = '.'; 
    $files = new RecursiveIteratorIterator(
                     new RecursiveDirectoryIterator(
                             $path, 
                             FilesystemIterator::SKIP_DOTS
                          ), 
                     RecursiveIteratorIterator::SELF_FIRST
                 ); 
    foreach ($files as $name => $file) { 
    echo $name, PHP_EOL; 
    } 
  ?> 

(164) Дана папка с картинками. При обновлении страницы выведите картинку случайным образом. 

Решите две задачи: 

1. Картинки могут повторятся. 

2. Показанная картинка не будет повторятся пока не будут показаны все картинки из папки. То есть все картинки из папки нужно показать только 1 раз, но случайным образом. Когда все будут показаны - начинаем заново: показываем по второму кругу, но только 1 раз. 

u164.php

  <?php 
    //Получаем список картинок 
    $dir="img"; 
    $images = scandir($dir); 
    //убираем "." и ".." 
    unset ($images[0]); 
    unset ($images[1]); 
    $images = array_values($images); 
    $i=rand(0,(count($images)-1)); 
   
    class ImgDB { 
    const DB_NAME = "rotator.db"; 
    private $_db; 
    function __construct(array $data){ 
    //если база еще не создана - создаем и соединяемся, 
    //иначе - соединяемся с базой 
    if(is_file(self::DB_NAME)){ 
    $this->_db = new SQLite3(self::DB_NAME); 
    }else{ 
    $this->_db = new SQLite3(self::DB_NAME); 
    $sql = 'CREATE TABLE imgs(id INTEGER PRIMARY KEY 
    AUTOINREMENT,filename TEXT)'; 
    $this->_db->exec($sql) or die($this->_db->lastErrorMsg()); 
    foreach ($data as $k=>$v){ 
    $sql = "INSERT INTO imgs(filename) VALUES (' $v');"; 
    $this->_db->exec($sql) or die($this->_db->lastErrorMsg()); 
    } 
    } 
    } 
    public function showImgOnce($data){ 
    $sql = 'SELECT * FROM imgs ORDER BY RANDOM() LIMIT 1;'; 
    $res=$this->_db->query($sql) or die($this->_db->lastErrorMsg()); 
    $res = $this->db2arr($res); 
    $id = $res[0]['id']; 
    $sql = "select count(*) from imgs;"; 
    //Если в таблице последняя запись - перезаписываем 
    if (($this->_db->query($sql))==1){ 
    foreach ($data as $k=>$v){ 
    $sql = "INSERT INTO imgs(filename) VALUES (' $v');"; 
    $this->_db->exec($sql) or die($this->_db->lastErrorMsg()); 
    } 
    } 
    //Удаляем запись о показанной картинке 
    $sql = "DELETE FROM imgs WHERE id=$id"; 
    $del=$this->_db->exec($sql) or die($this->_db->lastErrorMsg()); 
    return $res[0]["filename"]; 
    } 
    protected function db2arr($res){ 
    $arr = array(); 
    while($row=$res->fetchArray(SQLITE3_ASSOC)) 
    $arr[] = $row; 
    return $arr; 
    } 
    } 
    $imgdata = new ImgDB($images); 
    echo 
    '<img src="/storage/public/books/7c/e7/38aaa3a23c19/'.
    $dir.
    '/'.$imgdata->showImageOnce($images).'">'; 
  ?> 

## X Задачи на Session в PHP 

(165) Задача. Сделайте две страницы: index.php и hello.php. При заходе на index.php спросите с помощью формы имя пользователя, запишите его в куки. При заходе на hello.php поприветствуйте пользователя фразой "Привет, %Имя%!" . 

Решение: 

Страница index.php

index.php 

    <form action="" method="GET"> 
    <input type="text" name="username"> 
    <input type="submit"> 
    </form> 
   
  <?php 
    //Если форма была отправлена и имя не пустое: 
    if (!empty($_REQUEST['username'])) { 
    //Пишем имя в куки: 
    setcookie('username', $_REQUEST['username'], time()+3600, '/');
    }
  ?> 

Страница hello.php: 

hello.php

  <?php 
    //Если есть данные в куки об имени пользователя: 
    if (!empty($_COOKIE['username'])) { 
    echo $_COOKIE['username']; //выведем имя на экран 
    } 
  ?> 

(166) Спросите у пользователя телефон с помощью формы. Затем сделайте так, чтобы в другой форме (поля: имя, фамилия, телефон) при ее открытии поле телефон было автоматически заполнено. Спрашиваем телефон: 

u166a.php

  ..
  <form action="" method="GET"> 
  <input type="text" name="phone"> 
  <input type="submit"> 
  </form> 

  <?php 
    //Если форма была отправлена и телефон не пустой: 
    if (!empty($_REQUEST['phone'])) { 
    //Пишем телефон в куки: 
    setcookie('phone', $_REQUEST['phone'], time()+3600, '/');
    }
    ?>
 
Другая форма: 

u166b.php

  <?php 
    //Если телефон есть в куки - запишем его в переменную $phone: 
    if(!empty($_COOKIE['phone'])) 
    $phone = $_COOKIE['phone']; 
    else 
    $phone = ' ; 
  ?> 
     
    <form action="" method="GET"> 
    <input type="text" name="name"> 
    <input type="text" name="surname"> 

    <!- Заполним атрибут value переменной $phone: -> 
    <input type="text" name="phone" value=" <?php echo $phone ?> "> 

    <input type="submit"> 
    </form> 

(167) Задание 1 .
 
Создайте три страницы с формами, содержащими по одному полю ввода на стр. Обработчик каждой последующей формы будет вести на следующую страницу. На первой страницы спросим имя, на второй странице фамилию, на третьей возраст, а на четвертой выведите все данные используя сессию. 

(168) Задание 2. 

Создайте в сессии массив для хранения всех восещенных страниц и сохраните в качестве его очередного элемена путь к текущей странице. Выведите в цикле список всех посещенных пользователями страниц 

Page 1 

  <?php 
    // page 1 
    session_start(); //открываем сессию 
    //создаем в сессии массив для хранения 
    // всех посещенных страниц 
    //и сохраняем в качестве его очередного 
    //элемента текущую страницу 
    $_SESSION['pages'][]=$_SERVER['PHP_SELF']; 9. ?> 
    <form action="page2.php" method="post"> 
    Ваше Имя:<br><br> 
    <input type="text" name="name"><br><br> 
    <input type="submit" value="дальше"> 
    </form> 

Page 2 

  <?php 
    //страница 2 
   
    session_start(); //открываем сессию 
    $_SESSION['pages'][] = $_SERVER['PHP_SELF']; 
    //если пользователь ввел имя, фильтруем его и заносим в сессию 
    if(isset($_POST[name])) { 
    $_SESSION[name]=strip_tags(trim($_POST[name])); 
    } 
    ?>
    <form action="page3.php" method="post"> 
    Фамилия: <br> <br> 
    <input type="text" name="Fname"> <br><br> 
    <input type="submit" value="дальше"> 
    </form> 

Page 3 

  <?php 
    //page3.php 
   
    session_start(); //открываем сессию 
    $_SESSION['pages'][] = $_SERVER['PHP_SELF']; 
    //если пользователь ввел имя, фильтруем его и заносим в сессмю 
    if(isset($_POST[Fname])){ 
    $_SESSION[Fname]=strip_tags(trim($_POST[Fname]));
  ?> 
   
    <form action="page4.php" method="post"> 
    Возраст:<br><br> 
    <input type="text" name="age"> <br><br> 
    <input type="submit" value="дальше"> 
    </form> 

page 4 

  <?php
   session_start(); //открываем сессию 
   $_SESSION ['pages'] [] = $_SERVER['PHP_SELF']; 
   //если пользователь ввел имя, фильтруем его и заносим в сессию 
   if(isset($_SESSION[name]) && isset ($_SESSION[Fname]) 
   $$ isset ($_SESSION[age])) 
   { echo "Your name $_SESSION[name] $_SESSION[Fname] <br>"; 
   echo "Ваш возраст $_SESSION[age] лет"; 
   } 
   if(isset($_SESSION['pages'])) 
   {print '<h3> Список посещенных страниц</h3>'; 
   //вывод всех посещенных страниц в цикле 
   print '<ol>'; 
   foreach ($_SESSION['pages'] as $page) 
   { 
   echo '<li>', $page, '</li>'; 
   } 
   print '</ol>'; 
   } 
   ?> 

## XI MySQL и PHP задачи 

(169) Дан массив с таблицами ('user', 'profile'), именами полей (id, name и так далее) и их типами: 

    $tables = array( 
    'user'=>['id'=>'int', 'name'=>'varchar 256'], 
    'profile'=>['id'=>'int', 'value'=>'text'] 
    ); 

(170) Отобразите этот массив в базу данных (создайте в базе данных таблицы с заданными именами и полями). 

u170.php

  <?php 
    $tables = array( 
    'user'=>['id'=>'int', 'name'=>'varchar 256'], 
    'profile'=>['id'=>'int', 'value'=>'text'] 
    ); 
    function tables ($tables) { 
    $connect = new mysqli('SRV','LOGIN','PSWD','DB'); 
    foreach ($tables as $key=>$cols){ 
    $connect->query("CREATE TABLE $key(ololo int (10))"); //Создание 
    foreach ($cols as $col=>$value){ 
    $value=explode(' ',$value); //поиск размера 
    if(empty($value[1])) $value[1]=50; 
    $connect->query(
    "ALTER TABLE $key ADD $col $value[0]($value[1]) NOT NULL"
    ); //Добавление столбцов 
    } 
    $connect->query(
    "ALTER TABLE $key DROP ololo"); //удаление временного 
    } 
    } 
    tables($tables); 
  ?> 

(171) Сформировать базу данных “учетные сведения об учащихся”, включающую след. поля: Фамилия, Класс, Год поступления, Выполняемое поручение. Ввести в базу данных условную инфрмацию о 5 учениках. Написать программу просмотра базы данных и добавления в нее новой записи. 

Итого мы получим три файла index.php , mysql.php, view.php Index.php: 

u171.php

  <?php 
    $send=$_POST['send']; 
    $fio=$_POST['fio']; 
    $klass=$_POST['klass']; 
    $year=$_POST['year']; 
    $poruchenie=$_POST['poruchenie']; 

    $Name="Учетные сведения об учащихся"; 
    // Коннектимся к базе 
    include ('mysql.php'); 
    //Проверка заполнена ли форма удаления 
    if (isset($send)) 
    { 
    $sql = 
    "INSERT INTO $table_name (`id`,`fio`,`klass`,`year`,`poruchenie`)".
    " VALUES (NULL, ' $fio', ' $klass', ' $year', ' $poruchenie')"; 
    $q = mysql_query($sql,$conn) or die(mysql_error()); // отправляем 
    } 
    echo 
    "Задача №2. Сформировать базу данных ".
    "'Учетные сведения об учащихся', включающую следующие поля: ".
    " фамилия, класс, год поступления, выполняемое поручение. ".
    "Ввести в базу данных условную информацию о 5 учениках. ".
    "Написать программу просмотра базы данных и добавления в нее ".
    "новой записи.<br>"; 
    include ('view.php'); 
    //Форма 
    echo("<br><div align=left><form action='#' method='POST'><br> 
    <input type='hidden' name='send' value=' size='10' /><br> 
    ФИО: <input type='text' name='fio' value=' size='10' /><br> 
    Класс: <input type='text' name='klass' value=' size='10' /><br> 
    Год: <input type='text' name='year' value=' size='10' /><br> 
    Поручение: 
    <input type='text' name='poruchenie' value=' size='10' /><br> 
    <input type='submit' value='Добавить'/> 
    </div> 
    </form>"); 
  ?> 

mysql.php 

  <?php 
    $conn=mysql_connect("localhost", "root", ""); 
    $database = "msn"; //База 
    $table_name = "zadacha1_itogi"; 
    mysql_select_db($database); 
    $list_f = mysql_list_fields($database,$table_name); 
    $n1 = mysql_num_fields($list_f); 
  ?> 

view.php 

  <?php 
    // сохраним имена полей в массиве $names 
    for($j=0;$j<$n1; $j++){ 
    $names[] = mysql_field_name ($list_f,$j); 
    } 
    $sql = "SELECT * FROM $table_name"; // создаем SQL запрос 
    $q = mysql_query($sql,$conn) or die(); // отправляем 
    // запрос на сервер 
    $n = mysql_num_rows($q); // получаем число строк результата 
    //рисуем HTML-таблицу 

    echo " <TABLE BORDER=0 CELLSPACING=0 width=90% 
    align=center><tr><TD BGCOLOR='#003D57' align=center> 
    <font color='#FFFFFF'><b> $Name</b></font></td> 
    </tr></TABLE>"; 
    echo "<table cellspacing=0 cellpadding=1 border=1 
    width=90% align=center>"; 
    // отображаем названия полей 
    echo "<tr>"; 
    foreach ($names as $val){ 
    echo "<th ALIGN=CENTER BGCOLOR='#4D829E'> 
    <font color='#FFFFFF' size=2> $val</font></th>"; 
    } 
    // отображаем значения полей 
    echo "</tr>"; 
    for($i=0;$i<$n; $i++){ // перебираем все строки в 
    // результате запроса на выборку 
    echo "<tr>"; 
    foreach ($names as $k => $val) { // перебираем все 
    // имена полей 
    $value = mysql_result($q,$i,$val); // получаем 
    // значение поля 
    echo "<td><font size=2>  $value</font></td>"; 
    // выводим значение поля 
    } 
    echo "</tr>"; 
    } 
    echo "</table>"; 
  ?> 
