Четверг, 16.05.2024, 21:21
DigitalBox
Приветствую Вас Гость | RSS
Главная Преобразование массивов Регистрация Вход
Меню сайта

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



Преобразование массивов в текстовые строки (и наоборот)

Иногда необходимо выполнять операции над данными в специальном формате. Например, надо вывести слова предложения в отдельных строках. Одним из вариантов решения данной задачи является добавление перед выводом после каждого слова символа '\n' . Это легко можно осуществить с помощью оператора foreach, если предложение представляет собой массив, а не текстовую строку. РНР как раз позволяет создавать массив, элементами которого являются слова некоторого предложения.

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

$arrayname = explode("символ", строка);

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

$string1 = "Это: новый: дом";
$testarray = explode(":", $string1);
print_r($testarray);

Функция explode() используется для разделения строки $string1 символом двоеточия (:) и создания массива $testarray, содержащего подстроки. Результатом ее выполнения будет:

Array
(
     [0] => Это
     [1] => новый
     [2] => дом
)

При этом переменная $string1 не изменяет свое значение.

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

$resString = implode("символ", $массив);

В результате будет создана строка $resString, состоящая из элементов массива $массив, разделенных символом. Рассмотрим следующий пример:

$arrayIn = array("красный", "синий", "зеленый");
$stringOut = implode(";", $arrayIn);
echo $stringOut;

Результат выполнения функции implode() будет присвоен переменной $stringOut.

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

В результате выполнения последнего выражения получим:

красный;синий;зеленый

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

$stringOut = implode("; ", $arrayIn);

Таким образом, в результате выполнения этой функции получим:

красный; синий; зеленый


Преобразование переменных в массивы (и наоборот)

Иногда данные элементов массива необходимо сохранить в переменных, которые впоследствии можно использовать в выражениях РНР. Либо может возникнуть потребность в обратной операции — преобразовать переменные в элементы массива. Например, нужно выполнить одну и ту же операцию (прибавление 1) над несколькими переменными. Если преобразовать переменные в массив, с помощью одного оператора foreach можно получить доступ ко всем значениям и выполнить требуемые действия. В противном случае пришлось бы отдельно для каждой переменной писать свою строку кода.

Для решения этих задач в языке РНР предусмотрены функции extract() и compact(). Функция extract() позволяет получать значения элементов массива и присваивать их переменным, именами которых являются соответствующие индексы. Другими словами, значение каждого элемента копируется в переменную с именем индекса. Рассмотрим следующий пример, в котором с помощью функции extract() выводятся все данные массива:

$testarray = array("pink" => "гвоздика", "red" => "роза");
extract($testarray);
echo "Моим любимым красным цветком является $red.\n";
echo "Моим любимым розовым цветком является $pink.";

В результате будет выведено:

Моим любимым красным цветком является роза.
Моим любимым розовым цветком является гвоздика.

Функция compact() предназначена для выполнения обратного действия — преобразования набора переменных в массив. При этом значения переменных копируются в массив. Рассмотрим следующий пример:

$color1 = "красный";
$color2 = "синий";
$а = "фиолетовый";
$Ь = "оранжевый";

$arrayln = array("a", "b");
$arrayOut = compact ("color1", "color2", $arrayIn) ;

В результате получим следующий массив:

$arrayOut[color1] = красный
$arrayOut[color2] = синий
$arrayOut[a] = фиолетовый
$arrayOut[b] = оранжевый

Видно, что имена переменных использовались в качестве индексов.

Следует заметить, что в функции compact() использовались два метода для создания массива:

  • Первый состоит в использовании имен переменных напрямую для индексов. Так происходит с переменными $color1 и $color2.
  • Второй состоит в использовании массива, содержащего имена переменвых. В предыдущем примере таковым является $arrayIn с переменными и . Функция compact() добавляет эти имена в результирующий массив $arrayOut.

Язык РНР позволяет использовать оба метода. Если имеется несколько переменных, которые необходимо сгруппировать в массив, первый метод является более предпочтительным. В противном случае лучше применять второй метод, объединив сначала имена переменных в некоторый массив, а затем использовать его в качестве аргумента функции compact().


Разбиение и слияние массивов

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

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

$subArray = array_slice($массив, n1, n2);

Параметр n1 указывает позицию элемента, с которого начнется разбиение исходного $массива (0 — с первого элемента, 1 — со второго), а n2 — количество элементов нового массива. Например:

$testarray = array("красный", "зеленый", "синий", "розовый");
$subArray = array_slice($testarray , 1, 2);

В результате массив $subArray будет иметь вид:

[0] => зеленый
[1] => синий

Разбиение массива $testarray начинается с позиции номер 1 и содержит два элемента.

По умолчанию отсчет начинается с 0, а не с 1, поэтому первый элемент результирующего массива имеет значение "зеленый", а не "красный".

Аналогичным образом можно объединить различные массивы, используя следующее выражение:

$bigArray = array_merge($массив2, $массив2, ...);

Рассмотрим пример объединения двух массивов:

$array1 = array("красный", "синий");
$array2 = array("зеленый", "желтый");
$bigArray = array_merge($array1, $array2);

В результате будет создан массив $bigArray:

$bigArray[0] = красный
$bigArray[1] = синий
$bigArray[2] = зеленый
$bigArray[3] = желтый

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

$array1 = array("color1" => "красный", "color2" => "синий");
$array2 = array("color1" => "зеленый", "color3" => "желтый");
$bigArray = array_merge($arrayl, $array2);

В результате получим:

$bigArray[color1] = зеленый
$bigArray[color2] = синий
$bigArray[color3] = желтый

Если необходимо объединить массивы с одинаковыми индексами, следует воспользоваться функцией array_merge_recursive(), а не array_merge(). В этом случае будет создан многомерный массив, а не заменены исходные значения. Многомерные массивы более подробно рассматриваются в разделе в следующем разделе.


Сравнение массивов

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

$diffArray = array_diff($массив1, $массив2, ...);

В результате выполнения функции array_diff() массив $diffArray будет содержать элементы из $array1, отсутствующие в $аrrау2. При этом в результирующем массиве ключи сохранят свои значения. Рассмотрим следующий пример:

$array1 = аггау("а" => "яблоко", "Ь" => "апельсин", "с" => "банан");
$array2 = array("слива", "апельсин", "банан");
$diffArray = array_diff($array1, $array2);

В результате выполнения этого фрагмента кода получим:

$diffArray[a] = яблоко;

Поскольку элемент со значением "яблоко" находится в массиве $array1, но не в $аrrау2, он записывается в результирующий $diffArray с индексом "а".

Порядок следования аргументов в функции array_diff() является очень важным. Так, если последнюю строку кода в предыдущем примере переписать как

$diffArray = array_diff($array2, $array1);

то результирующий массив $diffArray будет иметь вид:

$diffArray[0] = слива;

Единственным элементом, который находится в массиве $аrrау2, но не в $array1, будет элемент со значением "слива". Именно поэтому он и записывается в $diffArray.

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

$diffArray = array_diff_assoc($array1, $array2);

Подставляя в качестве аргументов функции array_diff_assoc() массивы, которые использовались в предыдущем примере, получим следующий результат:

$diffArray[a] = яблоко
$diffArray[b] = апельсин
$diffArray[с] = банан

В этом случае ни один из элементов массива $array1 не содержится в $аrrау2, поскольку индексы у них различны.

Чтобы найти одинаковые элементы в двух и более массивах, в РНР предусмотрена функция:

$simArray = array_intersect($массив1, $массив2, ...);

Рассмотрим пример использования этой функции для массивов из предыдущих примеров:

$simArray = array_intersect($array1, $array2);

В результате массив $simArray будет иметь такие элементы:

$simArray[b] = апельсин
$simArray[c] = банан

Функция array_intersect() считает элементы одинаковыми, если их значения равны. Для того чтобы учитывать равенство как ключа, так и значения элемента, в языке PНР предназначена функция array_intersect_assoc(), которая имеет следующий синтаксис:

$simArray = array_intersect_assoc($array1 , $array2);

В результирующий массив $simArray будут записаны только те элементы $array1 и $аrrау2, которые имеют одинаковые ключ и значение. Используя в качестве аргумектов все те же массивы, результатом будет пустой массив, поскольку исходные не содержат одинаковых индексов.


Суммирование массивов

Для сложения всех значений массива следует использовать функцию:

$sum = array_sum($array);

Например:

$arrayAdd = array(3, 3, 3);
$sum = array_sum($arrayAdd);
echo $sum;

В результате будет получено значение 9.

Просуммировать можно только числовые массивы. Но, как уже упоминалось в предыдущих разделах, при использовании (в данном случае при попытке их "сложения") текстовые строки автоматически преобразуются в 0.


Удаление повторяющихся элементов

Очень часто необходимо удалить повторяющиеся элементы в массиве. Например, имеется массив с именами покупателей, который нужно вывести на экран без повторений. Это можно осуществить, используя выражение:

$names = array("Мэри", "Салли", "Салли", "Сэм");
$names2 = array_unique($names);

В результате массив $names2 будет иметь такой вид:

$names2[0] => Мэри
$names2[1] => Салли
$names2[3] => Сэм

Как можно увидеть, в результирующем массиве продублированный элемент был удален.


Перестановка ключей и значений в массиве

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

$testarray['rose'] = red
$testarray['iris'] = purple

Для перестановки значений и ключей следует воспользоваться функцией:

$arrayFlipped = array_flip($testarray);

В результате будем иметь:

$testarray['red'] = rose
$testarray['purple'] = iris

Форма входа

Мини-чат

Календарь новостей
«  Май 2024  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031

Поиск

Друзья сайта
Скажи сайту спасибо
ЯндексЯндекс. ДеньгиХочу такую же кнопку



Получить WMR-бонус на свой кошелек!

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Copyright MyCorp © 2024 Бесплатный конструктор сайтов - uCoz