Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Многомерные массивы. Наверняка начинающие программисты задаются вопросом: “Что такое массив?

Введение

Наверняка начинающие программисты задаются вопросом: “ Что такое массив? и как с ним работать?”. Действительно, поначалу присутствует полная неразбериха и непонимание. В этом уроке я попытаюсь навести порядок в вашей голове, и приведу несколько примеров по работе с массивами в php. В предыдущих уроках мы частично рассматривали работу с массивами, но сейчас я предлагаю резюмировать информацию, и сделать так чтобы она хорошо усвоилась вами.

Массивы

На самом деле массив в PHP - это упорядоченное отображение, которое устанавливает соответствие между значением и ключем. Т.е. это определенный набор значений, у которого имеется свой идентификатор (key) и присвоенное ему значение (value). Вспомните как вы заполняете анкету? Там присутствуют обязательные поля фамилия,имя, отчество, год рождения и т.д.

В примере все становиться ясно, здесь слово фамилия является ключом, в котором содержится ваша фамилия, например Петров.

Пример:

Анкета

  • фамилия:Петров
  • имя:Алексей
  • год рождения:1988

А теперь пример, как можно создать массив в php используя такие же данные. Создать можно двумя способами:

1. С указанием ключа:

1 2 3 4 5 <?php $anketa = array("family"=>"Петров","name"=>"Алексей","year"=>"1988");?>

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

1 2 3 4 5 <?php echo $anketa["family"]; //В браузер будет выведена фамилия?>

Или для того чтобы пробежаться по массиву и вывести все его значения используем функцию foreach();

1 2 3 4 5 6 7 8 9 10 <?php $anketa = array("family"=>"Петров","name"=>"Алексей","year"=>"1988"); //Здесь происходит перебор массива и вывод ключа и //соответствующее ему значение foreach ($anketa as $k => $v) { echo "$k - $v<br/>"; }?>

2. Без указания ключа:

1 2 3 4 5 <?php $anketa = array("Петров","Алексей","1988");?>

В данном случае по умолчанию ключами являются числовые значения. Чтобы вызвать имя необходимо выполнить следующее:

1 2 3 4 <?php echo $anketa[1];?>

У первого значения ключ в данном случае будет равен 0, т.е. echo $anketa[0]; выдаст фамилию.

Я думаю этих простых примеров достаточно, давайте обратимся к документации.

Синтаксис

Массив может быть создан языковой конструкцией array(). В качестве параметров она принимает определенное количество разделенных запятыми пар key => value (ключ => значение).

Все что мы с вами разобрали является примерами одномерного массива. Далее рассмотрим примеры многомерных массивов.

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

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

1 2 3 4 5 6 7 8 <?php $school = array("class"=>array("9","10","11"),"teacher"=>array("Михайлова И.В.","Иванова Л.П","Радищева О.В")); //Выведет 9 класс echo $school['class'][0];?>

Это и будет наш многомерный массив, т.е. массив внутри массива, его состав можно посмотреть командой print_r(массив):

1 2 3 4 5 <?php print_r($school);?>

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

Практика

Практика показывает что Вам предстоит довольно часто сталкиваться с массивами: при работе с информацией полученной из файлов или из БД, данные переданные через суперглобальные массивы $_POST и $_GET и других случаях. Помимо функции создания массива array(), существует множество вспомогательных функций для работы с массивами, с ними вы можете ознакомиться самостоятельно в документации.

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

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

Теперь наша гостевая книга (не забывайте что данный скрипт является основой, и его можно применять где угодно) будет содержать дополнительный модуль. Он будет выводить все сообщения, и напротив каждого будет стоять ссылки, которые будут отвечать за определенные действия (удаление и редактирование).

Детали

Для того чтобы не вставлять лишний код на страницу советую вам обращаться к предыдущему уроку

index.php

Файл остается без изменений.

add.php

Оставляем без изменений

read.php

Оставляем без изменений

moder.php

Данный файл будет отвечать за редактирование записей. Он состоит из 3-х частей начнем с первой.

Вывод записей

Отображение записей будет происходить так же как и в read.php, но немного будет модернизирован, каждой записи будет присвоен номер, под которым он находиться в массиве.

////////////////////////
// /Вывод сообщений ///
///////////////////////
else {

//Читаем файл в массив
$data = @file($url);

//Запускаем цикл, чтобы определить номер записи
//и в последующем передовать это значение(см. выше)
for($i=0;$i<=count($data)-1;$i++) {

//Разбиваем строку на переменные
list($name,$mail,$text) = explode("::",$data[$i]);

//Выводим их в браузер
echo "$name [$mail] - $text<br/>";

//Ссылка на удаление [D], в ней передается 2 переменные методом GET
echo "<a href=\"moder.php?del=1&num=$i\">[D]</a>";

//Ссылка на редактирование [E],

//в ней передается 2 переменные методом GET
echo "<a href=\"moder.php?edit=1&num=$i\">[E]</a>";
echo "<br/><br/>";

}

 

Обратите внимание что этот фрагмент работает после проверки условий, которые мы рассмотрим ниже. Здесь напротив каждой записи стоят две ссылки [D] и [E], т.е. delete или edit. Ссылка передает 2 переменные, наличие которых мы будет проверять выше.

Удаление записей

Для того чтобы удалить запись, мы должны знать её порядковый номер в массиве, для этого мы создали ссылку в режиме просмотра сообщений. После перехода по этой ссылке, значения извлекаем из массива $_GET, где $_GET['del'] будет содержать единицу, а $_GET['num'] - переменную $i. Давайте рассмотрим следующий фрагмент:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 //////////////////// //Удаление записи// /////////////////// //Проверяем наличие переменной if($_GET['del']) { //Читаем файл в массив $data = @file($url); //Удаление элемента в массиве, //номер которого передавали вторым параметром $num $data[$_GET['num']]=""; //Записываем массив обратно $f = fopen($url,"w"); for($i=0;$i<=sizeof($data);$i++) { fputs($f,$data[$i]); } fclose($f); //Выводим сообщение echo "Запись удалена<br/>"; echo "<a href=\"moder.php\">назад</a>"; }

Достаточно все просто, просто стираем значение в массиве, под необходимым номером.

Редактирование

Для того чтобы изменить запись, мы также должны знать её порядковый номер в массиве, для этого мы создали ссылку в режиме просмотра сообщений. После перехода по этой ссылке, значения извлекаем из массива $_GET, где $_GET['edit'] будет содержать единицу, а $_GET['num'] - переменную $i. Редактирование происходит в 2 этапа. Сначала мы выводим выбранную запись, значения которой оказываются в полях ввода input и textarea, после внесенных изменений нажимаем на кнопку, которая передает данные скрипту, выполняющего перезапись в файле.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 ///////////////////// // редактирование /// //////////////////// if($_GET['edit']){ //Создаем условие, проверяем была ли нажата кнопка if($_POST['change']) { //Читаем файл в массив $data = @file($url); //Формируем строку и пишем её на старое место в массиве $data[$_POST['num']] = $_POST['name']."::".$_POST['mail']."::".$_POST['text']."\n"; //Открываем файл и урезаем его до нулевой длины $f = fopen($url,"w"); for($i=0;$i<=sizeof($data);$i++) { //Пишем строки(значения массива) fputs($f,$data[$i]); } fclose($f); //Выводим сообщение echo "Запись изменена<br/>"; echo "<a href=\"moder.php\">назад</a>"; } else { //Читаем файл в массив $data = @file($url); //Преобразуем строку в переменные list($name,$mail,$text) = explode("::",$data[$_GET['num']]); //Выводим форму echo '<form action="moder.php?edit=1" method="post">'; echo 'Имя:<input type="text" name="name" value="'.$name.'"><br/>'; echo 'Эл.почта:<input type="text" name="mail" value="'.$mail.'"><br/>'; echo '<textarea name="text" rows=5 cols=20 wrap="off">'.$text.'</textarea><br/>'; echo '<input type="hidden" name="num" value="'.$_GET['num'].'"'; echo '<input type="submit" name="change" value="изменить"><br/>'; echo '</form>'; } }

Соединяя все фрагменты кода, получаем следующее:

<?php

$url="gb.txt";

////////////////////
//Удаление записи//
///////////////////
if($_GET['del']) {
//Читаем файл в массив
$data = @file($url);
//Стираем элемент в массиве
//номер которого передавали вторым параметром $num
$data[$_GET['num']]="";

//Записываем массив обратно
$f = fopen($url,"w");
for($i=0;$i<=sizeof($data);$i++)
{
fputs($f,$data[$i]);
}
fclose($f);
//Выводим сообщение
echo "Запись удалена<br/>";
echo "<a href=\"moder.php\">назад</a>";

}

/////////////////////
// редактирование ///
////////////////////
if($_GET['edit']){
//Создаем условие, проверяем была ли нажата кнопка
if($_POST['change']) {

//Читаем файл в массив
$data = @file($url);

$name = $_POST['name'];
$mail = $_POST['mail'];
$text = $_POST['text'];

//Формируем строку и пишем её на старое место в массиве
$data[$_POST['num']] = "$name::$mail::$text\n";

//Открываем файл и урезаем его до нулевой длины
$f = fopen($url,"w");
for($i=0;$i<=sizeof($data);$i++)
{
//Пишем строки(значения массива)
fputs($f,$data[$i]);
}
fclose($f);

//Выводим сообщение
echo "Запись изменена<br/>";
echo "<a href=\"moder.php\">назад</a>";

}
else {
//Читаем файл в массив
$data = @file($url);

//Преобразуем строку в переменные
list($name,$mail,$text) = explode("::",$data[$_GET['num']]);

//Выводим форму
echo '<form action="moder.php?edit=1" method="post">';
echo 'Имя:<input type="text" name="name" value="'.$name.'"><br/>';
echo 'Эл.почта:<input type="text" name="mail" value="'.$mail.'"><br/>';
echo '<input type="text" name="text" value="'.$text.'"><br/>';
echo '<input type="hidden" name="num" value="'.$_GET['num'].'">';

echo '<input type="submit" name="change" value="изменить"><br/>';

echo '</form>';

}
}

////////////////////////
// /Вывод сообщений ///
///////////////////////
else {

//Читаем файл в массив
$data = @file($url);

//Запускаем цикл, чтобы определить номер записи
//и в последующем передовать это значение(см. выше)
for($i=0;$i<=count($data)-1;$i++) {

//Разбиваем строку на переменные
list($name,$mail,$text) = explode("::",$data[$i]);

//Выводим их в браузер
echo "$name [$mail] - $text<br/>";

//Ссылка на удаление [D], в ней передается 2 переменные методом GET
echo "<a href=\"moder.php?del=1&num=$i\">[D]</a>";

//Ссылка на редактирование [E], в ней передается 2 переменные методом GET
echo "<a href=\"moder.php?edit=1&num=$i\">[E]</a>";
echo "<br/><br/>";

}

}
?>

<== предыдущая лекция | следующая лекция ==>
 | Открыться даршану чистого видения


Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных