ресурс для начинающих веб-разработчиков
комплексные веб-услуги по созданию сайтов

Справочный материал по основным языкам программирования и верстки сайтов.

Готовая методика создания простых и сложных динамичных сайтов, с использованием PHP и MySQL.

Использование веб-редактора Adobe Dreamweaver в разработке сайтов.

Использование графических редакторов Adobe Flash, Adobe Photoshop, Adobe Fireworks в подготовке веб-графики.

Разработка веб-сайтов под "ключ".

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

Операции над массивами PHP. Перемещение по массиву. Строки PHP

Операции над массивами PHP

Перемещение по массиву

Довольно часто при программировании на PHP нам приходится перебирать все без исключения элементы некоторого массива. Если наш массив — список, то эта задача как мы уже знаем, не будет особенно обременительной. Это можно сделать с помощью обычных операторов цикла while, do-while, for. Вместе стем в РНР имеется специальная очень удобная конструкция foreach(для каждого), которая имеет две синтактические формы:

foreach (массив as $значение) {выражения}; foreach (массив as $индекс = >$значение) {выражения};

Здесь

  • $значение — переменная, выбираемая по своему усмотрению, для представления значения текущего элемента массива;
  • $индекс — переменная для представления значения текущего индекса элемента массива;
  • as — в выражении указанном в круглых скобках является ключевым.

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

Пример.

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Перемещение по массиву</title>
</head>

<body>
<?php
$Names=array("Фамилия"=>"Сидоров","Имя"=>"Дмитрий","Возраст"=>30);
foreach($Names as $value){
echo $value."<br>";
}
echo '<br>';
$key=key($Names);
foreach($Names as $key=>$value){
echo "$key-$value".'<br>';
}
?>
</body>
</html>

$value — возвращает значение элемента массива;

$key=key($Names) — где, функция key() возвращает ключ, который имеет текущий элемент (если он указывает на конец массива, возвращается пустая строка).

В окне веб-браузера это будет выглядеть ТАК.

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

  • current (массив) — возвращает текущее значение элемента массива, не перемещая указатель;
  • next (массив) — перемещает указатель на следующий элемент массива;
  • prev (массив) — перемещает указатель на предыдущий элемент массива;
  • end (массив) — перемещает указатель на последний элемент массива;
  • reset (массив) —перемещает указатель на начальный элемент массива;

Если к массиву не применялась функция перемещения указателя, то считается, что он установлен на первый (начальный) элемент.

Пример.

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Перемещение по массиву</title>
</head>

<body>
<?php
$Names=array("Фамилия"=>"Сидоров","Имя"=>"Дмитрий","Возраст"=>30);
$x=current($Names);
echo $x;
echo '<br>';
$x=next($Names);
echo $x;
echo '<br>';
$x=reset($Names);
echo $x;
?>
</body>
</html>

В окне веб-браузера это будет выглядеть ТАК.

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

Например.

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Перемещение по массиву</title>
</head>

<body>
<?php
$Names=array("Фамилия"=>"Сидоров","Имя"=>"Дмитрий","Возраст"=>30);
$x=next($Names); //переход к следующему элементу массива
if($x===false){ //если выход за конец массива
echo "Выход за конец массива"; //вывод предупреждения
}
else{
echo $x; //вывод значения элемента массива
}
?>>
</body>
</html>

В окне веб-браузера это будет выглядеть ТАК.

Обратите внимание, что здесь и в других подобных случаях необходимо использовать оператор жесткого равенства = = =, поскольку элемент массива, возвращаемый функцией next(), можетиметь значение null, "", 0, "0" и false, но это еще не повод остановить обработку. Оператор жесткого равенства учитывает типы сравнимых значений.

Запись значений элементов массива в переменные. Конструкция list

Чтобы значения элементов массива с числовыми индексами, начинающимися с 0, присваивать переменным из заданного списка, можно использовать следующую конструкцию:

list (список_ переменных) = массив;

При этом создаются переменные, указанные в списке через запятую, и им присваиваются элементы массива с числовыми индексами: первой переменной присваивается значение элемента с индексом 0, второй переменной — значение элемента с индексом 1 и т.д.

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Конструкция list()</title>
</head>

<body>
<?php
$Names=array("Сидоров", "Дмитрий", 30);
list($x,$y)= $Names;
var_dump($x,$y); //выводит значения и типы переменных $x и $y
?>
</body>
</html>

В окне веб-браузера это будет выглядеть ТАК.

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

В списке переменных можно использовать элементы массива.

list($b[0], $b[1], $b[2]) = $a;

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

Пример:

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Конструкция list()</title>
</head>

<body>
<?php
$Names=array("Сидоров", "Дмитрий", 30);
list($b[0], $b[1], $b[2])= $Names;
var_dump($b); // структура массива [2]=> int(30) [1]=> string(7) "Дмитрий" [0]=> string(7) "Сидоров"
?>
</body>
</html>

В окне веб-браузера это будет выглядеть ТАК.

Строки PHP

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

Преобразование массива в текстовую строку

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

implode(разделитель, массив)

Параметр разделитель является строкой символов, которая вставляется между элементами массива при их объединении в текстовую строку. Если этот параметр не указан, то предполагается пустая строка " ". Данная функция возвращает строку, полученную в результате преобразования.

Пример:

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Преобразование массива в текстовую строку</title>
</head>

<body>
<?php
$Names=array("Сидоров", "Дмитрий", 30);
$str=implode($Names); //результат: СидоровДмитрий30
echo $str;
echo '<br>';
$str=implode("-", $Names); //результат: Сидоров-Дмитрий-30
echo $str;
?>
</body>
</html>

В окне веб-браузера это будет выглядеть ТАК.

Преобразование текстовой строки в массив

Для записи фрагментов текстовой строки элементы массива служит функция

explode(разделитель, строка [, количество])

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

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

Пример:

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Преобразование текстовой строки в массив</title>
</head>

<body>
<?php
$str="Сидоров, Дмитрий, 30";
$Names=explode(" ",$str); /*структура массива: [0] => Сидоров, [1] => Дмитрий, [2] => 30*/
print_r($Names);
echo '<br>';
$Names=explode("Дмитрий", $str); /*структура массива: [0] => Сидоров, [1] => , 30 */
print_r($Names);
?>
</body>
</html>

В окне веб-браузера это будет выглядеть ТАК.

    Другие операции над массивами

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

  • array_unique(массив) — возвращает массив, полученный из указанного в качестве параметра путем удаления из него повторяющихся элементов.
  • Пример:

    <?php
    $mar=array("a","b","c","b",6, 6);
    $x=array_unique($mar); /*структура массива: [0] => a [1] => b [2] => c [4] => 6*/
    print_r($x);
    ?>
  • array_sum(массив) — возвращает сумму значений элементов массива, указанного в качестве параметра.
  • Пример:

    <?php
    $mar=array(1, 2, 3, "4");
    $x=array_sum($mar); //возвращает 10
    print_r($x);
    ?>
  • array_slice(массив, n1, n2) — возвращает массив, являющейся частью исходного масива, указанного в качестве параметра. В результате массив попадет n2 элементов исходного массива, начиная с элемента, имеющего номер n1.
  • Пример:

    <?php
    $mar=array(1, 2, 3, 4, 5, 6);
    $x=array_slice($mar, 2, 3); /*структура массива: [0] => 3 [1] => 4 [2] => 5 */
    print_r($x);
    echo "<br>";
    $x=array_slice($mar, -2, 3); /*структура массива: [0] => 5 [1] => 6*/
    print_r($x);
    ?>
  • array_merge(массив1, массив2, . . . , массивN) — возвращает массив, получающийся в результате объединения двух или более массивов, указанных в качестве параметров.
  • Пример:

    <?php
    $a= array("a", "b", "c");
    $b= array("a", "x", "y");
    $x=array_merge($a,$b); /*cтруктура массива: [0] => a [1] => b [2] => c [3] => a [4] => x [5] => y */
    print_r($x);
    ?>
  • array_diff(массив1, массив2, . . . , массивN) — возвращает массив, состоящий из элементов массива, указанного в качестве первого параметра, которых нет в остальных массивах.
  • Пример:

    <?php
    $a= array("a", "b", "c");
    $b= array("a", "x", "y");
    $x=array_diff($a,$b); /*cтруктура массива: [1] => b [2] => c */
    print_r($x);
    ?>
  • array_flip(массив) — возвращает массив, получающийся из указанного в качестве параметра путем перестановки местами индексов и значений.
  • Пример:

    <?php
    $a= array("Сидоров", "Дмитрий", 30);
    $x=array_flip($a); /*cтруктура массива: [Сидоров] => 0 [Дмитрий] => 1 [30] => 2 */
    print_r($x);
    echo "<br>";
    $a=array("Фамилия"=>"Сидоров", "Имя" =>"Дмитрий", "Возраст"=> 30);
    $x=array_flip($a); /*cтруктура массива: [Сидоров] => Фамилия [Дмитрий] => Имя [30] => Возраст */
    print_r($x);
    ?>
  • extract(массив) — создает переменные из символьных индексов массива и присваивает им значения соответствующих элементов массива; возвращает количество созданных переменных.
  • Пример:

    <?php
    $a=array("Фамилия"=>"Сидоров", "Имя" =>"Дмитрий", "Возраст"=> 30);
    $x=extract($a);
    echo "Cотрудник нашей компании $Фамилия $Имя. Ему $Возраст лет";
    ?>
  • сompact(список_имен_переменных) — возвращает массив, созданный из указанных переменных, действие этой функции противоположно действию extrac().
  • Пример:

    <?php
    $a="Сидоров";
    $b="Дмитрий";
    $c=30;
    $x=compact("a", "b", "c"); /*структура массива: [a] => Сидоров [b] => Дмитрий [c] => 30 */
    print_r($x);
    ?>