Все ленты — последние статьи

* Рекурсия или рекурсивный обход массива, выводим массив с файлами,Извлечение элементов из массива с помощью array_slice(),Двумерный массив.

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

Листинг № 1 — Рекурсивный обход массива.
<?php
// массив Машины
$m = array('Honda','Hammer','BMW','Toyota');

 

// массив Самолёты
$s = array('AH','TU-144','Boing','СУ');

// массив Танки
$t = array('Тигр','Пантера','Т-34','Аль Халид');

// массив Корабли
$k = array('Кузнецов','Ямато','Ясень','Петропавловск');


// массивы
$th = array($m, $s, $t, $k);
$th1 = array($th, $th, $th, $th);
$th2 = array($th1, $th, $k, $th, $k, $th1, $th1, $th1, $th1);

// представление вложенности (структуры, стек) массива
echo '<pre>';
print_r($th2);
echo '</pre>';

// Функция выполняющая рекурсивный спуск по массиву
function recursion($arr)
{
if(is_array($arr))
{
for($i=0; $i<count($arr); $i++)
{
if(is_array($arr[$i]))
{
recursion($arr[$i]);
}
else
{
echo $arr[$i].'<br>';
}
}
}
else
{
echo $arr.'<br>';
}
}


// Вывод на монитор
recursion($th2);

?>

 

вторая статья

 

//тут выводим массив с файлами
//$filelist= list_file('./ftp_load');
//echo "<table border=1>";
//for ($i=0; $i<=count($filelist); $i++)
//{
// echo "<tr>";
//

// echo "<td>".$filelist[$i]."</td>";

// echo "</tr>";
//}
//echo "</table>";

 

третья статья

Извлечение элементов из массива с помощью array_slice()

Иногда нужно работать с диапазоном элементов массива. Например, нужно обрабатывать большой кусок массива или упорядочить массив, а затем извлечь из него "10 первых" значений от начала массива.

В данном уроке разбирается функция PHP array_slice(), с помощью которой можно извлечь диапазон элементов из массива.
Основы использования array_slice()

В функцию array_slice() передаются следующие аргументы:

Массив, из которого будет извлекаться часть элементов.
Позиция, с которой начинается извлекаемая часть массива (отсчёт элементов в массиве начинается с 0).
Количесвто элементов/, которые надо извлечь из массива.

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

Пример использования функции array_slice():
1 $directors = array( "Alfred Hitchcock", "Stanley Kubrick", "Martin Scorsese", "Fritz Lang" );
2
3 // Выводит "Array ( [0] => Stanley Kubrick [1] => Martin Scorsese )"
4 print_r( array_slice( $directors, 1, 2 ) );

В выше приведённом коде создаётся массив с 4-мя элементами (имена режиссёров), затем используется функция array_slice() для извлечения второго и третьего элементов.

Заметьте, что позиция элемента в массиве и его индекс не всегда одно и тоже. Например, первый элемент массива всегда имеет позицию 0, но его индекс может быть 456. Индексированные массивы PHP не обязаны иметь последовательные индексы, начинающиеся с ноля (хотя очень часто разработчики устанавливают именно такую нумерацию индекса).
Сохранение индексов

В выше приведённом примере можно заметить, что array_slice() изменила индексы элементов в возвращаемом массиве: Stanley Kubrick получил индекс 0, а Martin Scorsese получил индекс 1. Часто такое функционирование не вызывает никаких проблем, так как важен порядок следования элементов в получаемом массиве, а не их индексы.

Однако, иногда важно сохранять индексы извлекаемых элементов. Например, индексы могут быть ключами, с помощью которых указываются записи в таблице данных, или они могут быть важными для каких-то других целей. В таком случае вы можете сохранить индексы извлекаемых элементов с помощью передачи в качестве четвёртого аргумента значения true в функцию array_slice(). Например:
1 $directors = array( "Alfred Hitchcock", "Stanley Kubrick", "Martin Scorsese", "Fritz Lang" );
2
3 // Выводит "Array ( [1] => Stanley Kubrick [2] => Martin Scorsese )"
4 print_r( array_slice( $directors, 1, 2, true ) );

Заметьте, что функция array_slice() в данном случае сохранили индексы оригинального массива для элементов: 1 для Stanley Kubrick, и 2 для Martin Scorsese.

Функция array_slice() всегда сохраняет индексы в ассоциированных массивах. Таким образом нет необходимости передавать значение true в качестве четвёртого аргумента при работе с ассоциированными массивами.
Извлечение элементов до конца массива

Если вы не будете указывать третий аргумент функции array_slice(), то в массив -результат попадут все элементы оригинального массива, начиная со стартовой позиции до конца массива. Такое функционирование может быть удобно в случае, если вы не знаете размеров оригинального массива. Например:
1 $directors = array( "Alfred Hitchcock", "Stanley Kubrick", "Martin Scorsese", "Fritz Lang" );
2
3 // Выводит "Array ( [0] => Stanley Kubrick [1] => Martin Scorsese [2] => Fritz Lang )"
4 print_r( array_slice( $directors, 1 ) );
Использование функции array_slice() для ассоциированных массивов

вы можете использовать array_slice() для извлечения элементов из ассоциированного массива. Ниже приведён пример извлечения 2 элементов из ассоциированного массива, начиная со второго элемента:
1 $movie = array( "title" => "Rear Window",
2 "director" => "Alfred Hitchcock",
3 "year" => 1954,
4 "minutes" => 112 );
5
6 // Выводит "Array ( [director] => Alfred Hitchcock [year] => 1954 )"
7 print_r( array_slice( $movie, 1, 2 ) );

Заметьте, что функция array_slice() сохранила индексы "director" и "year" в массиве-результате.
Резюме

В данной статье мы разобрали использование функции array_slice(). Полезной PHP функции, которая возвращает диапазон элементов массива. Вы узнали:

Как использовать функцию array_slice() с индексированными и ассоциированными массивами.
Сохранять оригинальные индексы при работе с индексированными массивами.
Извлекать все элементы до конца оригинального массива.

 

след.статья

 

Двумерный массив.

И так разберём, что такое двумерный массив и как он выглядит. Для тех кто не в теме, следует прочитать для начала урок посвящённый массивам вообще и одномерному массиву в частности.
Название урока Одномерный массив.
Сказать простым языком двумерный массив это массив, элементами которого выступают другие массивы с данными (массив в массиве). Кстати сказать вложенность массивов может быть не только двумерной, но на практике такое встречается крайне редко. Причина тому, затраты на обработку. Начиная работу с массивом на странице, скрипт загружает всё содержимое массива в оперативную память, тем самым процесс работы с таким массивом становится слишком ресурсоёмким, не оправданным. В таких случаях применяется база данных, за счёт чего происходит увеличение быстродействия.
Двумерный массив это по сути матрица, т.е. таблица с данными. Теперь посмотрим как это выглядит визуально, как создать двумерный массив.
Листинг № 1 — Пример создания двумерного массива.

<?php
// массив Машины
$m = array('Honda','Hummer','BMW','Toyota');

// массив Самолёты
$s = array('AH','TU-144','Boing','СУ');

// массив Танки
$t = array('Тигр','Пантера','Т-34','Аль Халид');

// массив Корабли
$k = array('Кузнецов','Ямато','Ясень','Петропавловск');


// двумерный массив Техника
$THN = array($m, $s, $t, $k);

?>
Пример из листинга № 1, достаточно наглядно показывает как формируется двумерный массив. Изначально создаётся одномерный массив, который в свою очередь, вкладывается в массив "Техника" $TH. таким образом уже массив $TH имеет в качестве значений своих ключей массивы. В этом примере мы создали не ассоциативный массив, просто для наглядности. Хотя для полной ясности содержимого при обходе массива, следует создать ассоциативный массив. Это такой массив в котором ключ это не числовое значение, задаваемое по умолчанию каждому элементу, а осмысленное название. Проще сказать именуем массив, согласно его содержимому.
Листинг № 2 — Ассоциативный двумерный массив.

<?php

// массив Машины
$m = array('Honda','Hummer','BMW','Toyota');

// массив Самолёты
$s = array('AH','TU-144','Boing','СУ');

// массив Танки
$t = array('Тигр','Пантера','Т-34','Аль Халид');

// массив Корабли
$k = array('Кузнецов','Ямато','Ясень','Петропавловск');


// двумерный массив Техника
$TH = array('Машины'=>$m, 'Самолёты'=>$s, 'Танки'=>$t, 'Корабли'=>$k);

?>
Теперь наш двумерный массив $TH имеет не просто числовой ключ для каждого входящего в него массива, а имя по которому можно определить содержание вложенного массива.
Обход двумерного массива.

Обход двумерного массива — есть не что иное, как последовательный перебор элементов массива. А в листинге ниже представлен код который ещё и выводит на монитор содержимое.
Листинг № 3 — Обход двумерного массива

<?php
// обход двумерного массива
for($i=0; $i < count($THN); $i++)
{

for($q=0; $q < count($THN[$i]); $q++)
{
echo " » ".$THN[$i][$q];
}
echo "<br>";
}

?>
На мониторе увидим следующее:
» Honda » Hummer » BMW » Toyota
» AH » TU-144 » Boing » СУ
» Тигр » Пантера » Т-34 » Аль Халид
» Кузнецов » Ямато » Ясень » Петропавловск
Это пример обхода, при котором двумерный массив является не ассоциативным, т.е. ключами двумерного массива выступают числа. Чтобы вывести на монитор содержимое ассоциативного массива, рассмотрим пример в листинге ниже.
Листинг № 4 — Обход двумерного ассоциативного массива.

<?php

// Подсчитываем количество элементов в массиве
$sum = count($TH);

// Ассоциативный массив следует обходить, при помощи конструкции foreach
foreach($TH as $key => $vol)
{
// выводим название массива
echo $key ." -- ";

// обход
for($q=0; $q <= $sum; $q++)
{
echo " ".$TH[$key][$q];
}
echo "<br>";
}

?>
На мониторе увидим следующее:
Машины -- Honda Hummer BMW Toyota
Самолёты -- AH TU-144 Boing СУ
Танки -- Тигр Пантера Т-34 Аль Халид
Корабли -- Кузнецов Ямато Ясень Петропавловск
Ниже представлен пример упорядоченного вывода ассоциативного массива.
Листинг № 5 — Обход двумерного массива и вывод в таблице.

<?php

// массив Машины
$m = array('Honda','Hummer','BMW','Toyota');

// массив Самолёты
$s = array('AH','TU-144','Boing','СУ');

// массив Танки
$t = array('Тигр','Пантера','Т-34','Аль Халид');

// массив Корабли
$k = array('Кузнецов','Ямато','Ясень','Петропавловск');


// двумерный массив Техника
$TH = array('Машины'=>$m, 'Самолёты'=>$s, 'Танки'=>$t, 'Корабли'=>$k);


// Подсчитываем количество элементов в массиве
$sum = count($TH);

echo "<table>";
foreach($TH as $key => $vol)
{
// выводим название массива
echo "<th>".$key ."</th>";

// обход

for($q=0; $q <= $sum; $q++)
{
echo "<tr><td> ".$TH[$key][$q]."<td></tr>";
}
}

echo "</table>";
?>
На мониторе увидим следующее:
Машины
Honda
Hummer
BMW
Toyota
Самолёты
AH
TU-144
Boing
СУ
Танки
Тигр
Пантера
Т-34
Аль Халид
Корабли
Кузнецов
Ямато
Ясень
Петропавловск
Из вышесказанного, можно сделать вывод, что по сути при выводе на монитор после обхода двумерного массива, вложенный массив выступает как строка таблицы с данными, что и формирует в свою очередь матрицу. Если мы изначально составим правильно вложенные массивы, то на выходе мы сможем получить таблицу с данными например анкетных данных, каждого работника. Рассмотрим ещё один пример, чисто матрица.
Листинг № 6 — Обход двумерного массива, матрица.

<?php

// массивы с данными на работников предприятия
$m = array('Александр','Новиков','35','ул. Новоясеневский проспект д. 7','125-89-63');
$s = array('Алексей','Бодров','28','ул. Астраханская д. 45','256-89-63');
$t = array('Николай','Хмельницкий','28','ул. Боровицкая д. 25','100-89-63');
$k = array('Олег','Нестеров','44','ул. Каховка д. 11','330-80-63');
$z = array('Олег','Нестеров','44','ул. Каховка д. 11','330-80-63');
$x = array('Олег','Нестеров','44','ул. Каховка д. 11','330-80-63');

// двумерный массив с данными о сотрудниках
$TH = array($m, $s, $t, $k, $z, $x);


// Подсчитываем количество элементов в массиве
$sum = count($TH);

echo "<table border='1' cellpadding='5'>
<tr>
<th>Имя</th><th>Фамилия</th><th>Возраст</th><th>Адрес</th><th>Телефон</th>
</tr>";
for($i=0; $i <= $sum; $i++)
{
echo "<tr>";
$sum = count($TH[$i]);
for($q=0; $q < $sum; $q++)
{
echo "<td> ".$TH[$i][$q]."</td>";
}
echo "</tr>";
}

echo "</table>";

?>
На мониторе увидим следующее:
Имя Фамилия Возраст Адрес Телефон
Александр Новиков 35 ул. Новоясеневский проспект д. 7 125-89-63
Алексей Бодров 28 ул. Астраханская д. 45 256-89-63
Николай Хмельницкий 28 ул. Боровицкая д. 25 100-89-63
Олег Нестеров 44 ул. Каховка д. 11 330-80-63
Я думаю вы уже догадались, что список значений массива на каждого человека может быть бесконечно большим, не только имя, фамилия, возраст и т.д., можно продолжать в зависимости от надобности. И хотелось бы добавить, что конечно формирование массивов, т.е. занесение данных, происходить должно не вручную. В этом уроке приведены примеры, наглядно показывающие работу с двумерным массивом, а точнее с его содержимым.
Рекурсивный спуск. Рекурсивный обход массива.
Урок закончен.