<MyRusakov.ru />

PHP и MySQL с Нуля до Гуру

PHP и MySQL с Нуля до Гуру

Данный курс - это более 20-ти часов видеоуроков по изучению PHP и MySQL. Ключевой момент курса - это создание движка для сайта с нуля. Каждая строчка комментируется. Практически для каждого урока имеются упражнения. Причём данные упражнения направлены не только на закрепление материала, но и на реализацию реальных задач, встающих перед Web-разработчиками при создании сайтов. После курса Вы сможете без проблем создавать движки для любых сайтов.

Также почти к каждому уроку идут упражнения для закрепления материала.

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

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Работа с массивами в PHP

Работа с массивами в PHP

Функций для работы с массивами в PHP достаточно много, и это неудивительно, если учесть, что с массивами при программировании приходится работать достаточно часто. И в этой статье мы разберём основные функции, которые создали для работы с массивами в PHP разработчики.

Для начала разберём простейшую функцию, которая проверяет находится ли элемент в массиве. Функция называется in_array():

<?php
  $arr = array("Num", "Str", "Int");
  if (in_array("Str", $arr)) echo "Элемент найден";
  else echo "Элемент не найден";
?>

Как видно из примера, данная функция проверяет наличие первого параметра среди значений массива, заданного вторым параметром. И возвращает true, если элемент найден, либо false, если не был найден. Особо продвинутые спросят: "А как же быть с такими вещами, как 0 и false, ведь это разные значения, но PHP их считает одинаковыми?". Для этого в функции in_array() существует ещё третий параметр, необязательный, который если имеет значение true, то функция сверяет не только значения, но и типы:

<?php
  $arr = array(0, "Str", "Int");
  if (in_array(false, $arr, true)) echo "Элемент найден";
  else echo "Элемент не найден";
?>

  Ещё одна очень полезная функция - array_unique(), которая принимает массив и возвращает массив без дублирующихся значений:

<?php
  $arr = array(3, 5, "Val", 3, "Val", 7);
  $arr_uniq = array_unique($arr);
  print_r($arr_uniq);
?>

  Как можно заметить, запустив скрипт, в получившемся массиве нет повторяющихся значений.

  Очень важные функции - это функции извлечения части массива из исходного (аналог функции substr(), только она для строк):

<?php
  $arr = array(12, 10, 15, "Name", "Some", -0.5);
  $arr_2 = array_slice($arr, 3);
  print_r($arr_2);
?>

  Эта функция принимает два параметра: исходный массив и номер элемента, с которого должен начаться новый массив (напоминаю, что нумерация начинается с нуля). Как видно, новый массив будет от элемента, номер которого задан во втором параметре и до конца исходного массива. Также если добавить третий параметр, то можно задать длину нового массива:

<?php
  $arr = array(12, 10, 15, "Name", "Some", -0.5);
  $arr_2 = array_slice($arr, 3, 2);
  print_r($arr_2);
?>

  В результате, Вы увидите: "Array ( [0] => Name [1] => Some )".

  Теперь перейдём к последней группе функций - функциям сортировки массивов. Но для начала напоминаю разницу между списками и ассоциативными массивами. Список - это массив, у которого индексами являются числа, которые упорядочены по возрастанию, начиная с 0. А ассоциативный массив - это массив, у которого индексами является, вообще говоря, строки, которые называются ключами. Почему это так важно при сортировке? Если Вы сортируете список, то Вам совершенно не важно, чтобы сохранялась связка: "ключ - значение", так как индексы не служат для идентификации значения, а служат лишь для обращения к нему. А в ассоциативном массиве первостепенное значение имеет именно связка: "ключ-значение", поэтому необходимо, чтобы при сортировке она сохранялась.

  Давайте начнём с простого: сортировки списков. Для этого существуют функции sort() и rsort(). Первая функция сортирует массив по возрастанию, а вторая по убыванию:

<?php
  $arr = array(15, 12, "String", 40, -2, 0, 12);
  sort($arr);
  print_r($arr);
  echo "<br />";
  rsort($arr);
  print_r($arr);
?>

Думаю, что здесь всё понятно.

  Теперь перейдём к функциям сортировки ассоциативных массивов: asort() и arsort(). Делают они всё тоже самое, но связь "ключ-значение" сохраняется:

<?php
  $arr = array("Name" => "Tommy", "Age" => "34", "Level" => "15");
  asort($arr);
  print_r($arr);
  echo "<br />";
  arsort($arr);
  print_r($arr);
?>

Теперь давайте рассмотрим функции сортировки по ключам ассоциативных массивов: ksort() и krsort():

<?php
  $arr = array("Name" => "Tommy", "Age" => "34", "Level" => "15");
  ksort($arr);
  print_r($arr);
  echo "<br />";
  krsort($arr);
  print_r($arr);
?>

  Уверен, что здесь всё прозрачно. А если что-то непонятно, то запустите скрипт, и проанализируйте результат.

  И, напоследок, рассмотрим функции пользовательской сортировки: uasort() и uksort(). Обе функции принимают два параметра: массив и пользовательскую функцию сортировки. Функция сортирует массив по значениям, а функция uksort() сортирует массив по ключам. В качестве примера рассмотрим такой скрипт:

<?php
  function cmp($x, $y) {
    if ($x == $y) return 0;
    if ($x == 1) return 1;
    if ($y == 1) return -1;
    if ($x > $y) return 1;
    else return -1;
  }
  $arr = array("A" => 1, "C" => 3, "B" => 2);
  uasort($arr, "cmp");
  print_r($arr);
  echo "<br />";
  uksort($arr, "cmp");
  print_r($arr);
?>

Как видите, мы написали свои правила сортировки, по которым число "1" всегда больше любого другого значения. Если ни одно из чисел не является "1", то тогда сравниваем по обычным правилам. Таким образом, PHP сортирует наш массив по правилам, описанным в функции сравнения, название которой мы передали в функциях uasort() и uksort().

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

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

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

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (25):

ramzes ramzes 17.01.2013 12:31:44

В последнем примере два раза повторяется функция uasort, похоже опечатка: $arr = array("A" => 1, "C" => 3, "B" => 2); uasort($arr, "cmp"); print_r($arr); echo "<br />"; uasort($arr, "cmp"); print_r($arr);

Ответить

Admin Admin 17.01.2013 15:46:42

Во втором случае должно быть uksort(). Исправил, спасибо!

Ответить

warez warez 22.02.2013 21:58:02

а вы за какой срок научились работать с php?

Ответить

Admin Admin 22.02.2013 22:22:13

За пару дней его освоил (поскольку это был уже далеко не первый язык), а вот дальше развиваюсь по сей день.

Ответить

warez warez 22.02.2013 23:12:40

у меня что то не больно развивается! теряюсь,путаюсь

Ответить

warez warez 22.02.2013 23:25:54

и не могу разобраться с этим Array ( [0] => 3 [1] => 5 [2] => Val [5] => 7 ) чем то похоже на отладку!

Ответить

lev_100rus lev_100rus 17.03.2013 04:06:25

Это и есть отладочная функция print_r. Просто так легче написать и смысл функции от этого не меняется. Но если для Вас это важно, то вы можете использовать циклы и вывести всё красиво:)

Ответить

lev_100rus lev_100rus 17.03.2013 04:08:06

ВОТ! Пользуйтесь на здоровье:) $arr = array(3, 5, "Val", 3, "Val", 7); $arr_uniq = array_unique($arr); for($i = 0; $i < count($arr_uniq); $i++) { echo $arr_uniq[$i]."<br />"; }

Ответить

tolia2012 tolia2012 29.03.2013 02:26:25

привет,сделал вот такой вот запрос($result = mysql_query("SELECT title,meta_d,meta_k,text FROM war13 WHERE page='index'",$db),все из таблицы вывелось,но с кракозябрами ??????????.файл htaccess создан, в нем все прописал как положено.при создание таблицы поставил кодировку utf-8 general-ci.сам сайт тоже на utf-8.в чем может быть проблема?спасибо.

Ответить

Admin Admin 29.03.2013 09:46:21

http://myrusakov.ru/php-encoding-problems.html

Ответить

Web_Developer Web_Developer 07.06.2013 17:09:20

Здравсвуйте, Михаил! Помогите, как посчитать сумму всех значений [votes]? :Array ( [0] => Array ( [id] => 1 [poll_id] => 1 [title] => Вариант один [votes] => 510 ) [1] => Array ( [id] => 2 [poll_id] => 1 [title] => Вариант 2 [votes] => 201 ) [2] => Array ( [id] => 3 [poll_id] => 1 [title] => Вариант 3 [votes] => 353 ) )

Ответить

Admin Admin 07.06.2013 22:03:28

for ($i = 0; $i < count($arr); $i++) $summa += $arr[$i]["votes"];

Ответить

Web_Developer Web_Developer 07.06.2013 23:07:48

А можно ли теперь как то прям в этом цикле использовать $summa? Ну то есть конечное число суммы которое получилось? В цикле просто получается вывод трех чисел с этой переменной: первое, сумма первого и второго, сумма всех...

Ответить

Admin Admin 07.06.2013 23:23:13

После цикла надо использовать $summa.

Ответить

Web_Developer Web_Developer 07.06.2013 23:27:39

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

Ответить

Admin Admin 08.06.2013 11:12:16

Сделать второй цикл, где уже считать проценты.

Ответить

Web_Developer Web_Developer 08.06.2013 13:14:54

Все получилось!!! Спасибо Вам большое!!!!

Ответить

Web_Developer Web_Developer 10.07.2013 14:16:27

Михаил, помогите пожалуйста! Мне нужно сделать авторизацию пользователей из файла... Есть такой код: $login = htmlspecialchars($_POST["login"]); $password = htmlspecialchars($_POST["password"]); $string = file_get_contents("users.txt"); $array = explode("\n", $string); Нужно как то $login.$password сравнить с на соответствие со значением массива $array... и если все прошло успешно, выполнять определенные действия. Заранее спасибо)

Ответить

Admin Admin 10.07.2013 17:52:15

И в чём проблема? Сравнение происходит с помощью ==.

Ответить

Web_Developer Web_Developer 10.07.2013 17:55:51

Да это понятно... просто я что то запутался, это в цикле нужно сравнивать?

Ответить

Admin Admin 10.07.2013 21:30:41

Всё зависит от содержимого файла, в каком оно формате. Затем нужно получить такой же формат у входных данных, а после через цикл искать совпадение, и если оно найдено, значит, данные введены верно.

Ответить

Web_Developer Web_Developer 11.07.2013 02:20:23

Михаил, я вот пытаюсь решить выше-описанную задачу следующим образом: if (in_array($login.$password, $array)) echo"совпадение есть"; else"совпадений нет"; Почему то не получается ничего, хотя в файле данные записаны в таком же формате... Не подскажете в чем ошибка? Заранее большое спасибо.

Ответить

Admin Admin 11.07.2013 09:14:51

http://myrusakov.ru/php-finderror.html - используйте этот метод для поиска ошибок.

Ответить

sergkosm sergkosm 16.07.2013 15:27:04

Миша, скажи, как мне изучать php, чтоб запоминать все? Я делаю так: подряд все твои статьи прочитываю, потом делаю у себя то, о чем написано и перехожу к следующему. Но потом я все это забываю.

Ответить

Admin Admin 16.07.2013 21:00:38

http://myrusakov.ru/php-how-study.html

Ответить

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.