Довольно часто при программировании на PHP нам приходится перебирать все без исключения элементы некоторого массива. Если наш массив — список, то эта задача как мы уже знаем, не будет особенно обременительной. Это можно сделать с помощью обычных операторов цикла while, do-while, for. Вместе стем в РНР имеется специальная очень удобная конструкция foreach(для каждого), которая имеет две синтактические формы:
foreach (массив as $значение) {выражения};
foreach (массив as $индекс = >$значение) {выражения};
Здесь
Конструкция foreach последовательно перебирает все элементы указанного ей массива, присваивая их значения переменной $индекс. Эти переменные доступны в коде, указанным в фигурных скобках. Код, работая с данными переменными, имеет дело с текущим на данной итерации элементом массива.
Пример.
<?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>';
}
?>
$value — возвращает значение элемента массива;
$key=key($Names) — где, функция key() возвращает ключ, который имеет текущий элемент (если он указывает на конец массива, возвращается пустая строка).
В окне веб-браузера это будет выглядеть ТАК.
Перебор элементов массива можно выполнить и с помощью специальных функций, которые реализуют перемещение указателя на текущий элементт массива:
Если к массиву не применялась функция перемещения указателя, то считается, что он установлен на первый (начальный) элемент.
Пример.
<?php
$Names=array("Фамилия"=>"Сидоров","Имя"=>"Дмитрий","Возраст"=>30);
$x=current($Names); //результат Сидоров
echo $x;
echo '<br>';
$x=next($Names); //результат Дмитрий
echo $x;
echo '<br>';
$x=reset($Names); //результат Сидоров
echo $x;
?>
В окне веб-браузера это будет выглядеть ТАК.
Все перечисленные функции перемещения указателя возвращают значение элемента массива. Однако применение функций prev() и next() может вывести указатель за пределы массива, и тогда они вернут логическое значение false, а не значение элемента массива. Поэтому эти функции обычно используются совместно с проверкой выхода за границы массива.
Например.
<?php
$Names=array("Фамилия"=>"Сидоров","Имя"=>"Дмитрий","Возраст"=>30);
$x=next($Names); //переход к следующему элементу массива
if($x===false){ //если выход за конец массива
echo "Выход за конец массива"; //вывод предупреждения
}
else{
echo $x; //вывод значения элемента массива
}
?>
В окне веб-браузера это будет выглядеть ТАК.
Обратите внимание, что здесь и в других подобных случаях необходимо использовать оператор жесткого равенства = = =, поскольку элемент массива, возвращаемый функцией next(), можетиметь значение null, "", 0, "0" и false, но это еще не повод остановить обработку. Оператор жесткого равенства учитывает типы сравнимых значений.
Чтобы значения элементов массива с числовыми индексами, начинающимися с 0, присваивать переменным из заданного списка, можно использовать следующую конструкцию:
list (список_ переменных) = массив;
При этом создаются переменные, указанные в списке через запятую, и им присваиваются элементы массива с числовыми индексами: первой переменной присваивается значение элемента с индексом 0, второй переменной — значение элемента с индексом 1 и т.д.
Пример:
<?php
$Names=array("Сидоров", "Дмитрий", 30);
list($x,$y)= $Names;
var_dump($x,$y); //выводит значения и типы переменных $x и $y
?>
В окне веб-браузера это будет выглядеть ТАК.
Конструкция list() по своему синтаксису похожа на вызов функции, но отличается от него тем, что может быть записана слева от оператора присвоения. Однако выражению с вызовом настоящей функции нельзя присваивать никакое значение. Иначе говоря вызов функции можетвстречаться только справа от оператора присвоения.
В списке переменных можно использовать элементы массива.
list($b[0], $b[1], $b[2]) = $a;
В этом случае происходит копирование значений элементов массива $a в элементы массива $b. Данная операция осуществляется, начиная с крайнего правого элемента массива $a, в результате чего порядок расположения элементов массива $b будет противоположен порядку элементов в массиве $a, хотя индексы элементов сохраняются.
Пример:
<?php
$Names=array("Сидоров", "Дмитрий", 30);
list($b[0], $b[1], $b[2])= $Names;
var_dump($b); /* структура массива [2]=> int(30) [1]=> string(7) "Дмитрий" [0]=> string(7) "Сидоров" */
?>
В окне веб-браузера это будет выглядеть ТАК.
Есть несколько функций, которые чрезвычайно часто используются при программировании сценариев. Среди них — функции для разбиения какой-либо строки на более мелкие части (например, эти части разделяются в строке каким-то специфическим символом типа |), и, наоборот, слияния нескольких небольших строк в одну большую, причем не впритык, а вставляя между ними разделитель.
Чтобы значения элементов объединить в их строковом представлении в одну текстовую строку, можно использовать функцию
implode(разделитель, массив)
Параметр разделитель является строкой символов, которая вставляется между элементами массива при их объединении в текстовую строку. Если этот параметр не указан, то предполагается пустая строка " ". Данная функция возвращает строку, полученную в результате преобразования.
Пример:
<?php
$Names=array("Сидоров", "Дмитрий", 30);
$str=implode($Names); //результат: СидоровДмитрий30
echo $str;
echo '<br>';
$str=implode("-", $Names); //результат: Сидоров-Дмитрий-30
echo $str;
?>
В окне веб-браузера это будет выглядеть ТАК.
Для записи фрагментов текстовой строки элементы массива служит функция
exhlode(разделитель, строка [, количество])
Параметр разделитель является строкой символов, которая рассматривается как разделитель фрагментов строки. Необязательный параметр(о чем говорят квадратные скобки) количество указывает максимальное количество элементов в возвращаемом массиве(при этом последний элемент будет содержать весь остаток строки).
Если разделитель не содержится в строке, то функция возвращает массив, содержащий единственный элемент, значением которого исходная строка. Если разделитель является пустой строкой, то функция возвращает логическое значение false.
Пример:
<?php
$str="Сидоров, Дмитрий, 30";
$Names=explode(" ",$str); /*структура массива: [0] => Сидоров, [1] => Дмитрий, [2] => 30*/
print_r($Names);
echo '<br>';
$Names=explode("Дмитрий", $str); /*структура массива: [0] => Сидоров, [1] => , 30 */
print_r($Names);
?>
В окне веб-браузера это будет выглядеть ТАК.
Здесь будут перечислены несколько полезных функций для работы с массивами.
array_unique(массив) — возвращает массив, полученный из указанного в качестве параметра путем удаления из него повторяющихся элементов.
Пример: