PHP статьи и уроки
Приветствую Вас, Гость!

Меню
Интересное:
Реклама:
Смотрю "Записки о MacBook и Mac OS", в блоге gamedev программиста.
Главная » Статьи » Уроки » Общие вопросы

Функции для работы с массивами и операции над массивами

Функции для работы с массивами

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

Функция list()

Предположим, у нас есть массив, состоящий из трех элементов:

$names[0]="Александр";
$names[1]="Николай";
$names[2]="Яков";

Допустим, в какой-то момент нам нужно передать значения всех трех элементов массива, соответственно трем переменным: $alex, $nick, $yakov. Это можно сделать так:

$alex = $names[0];
$nick = $names[1];
$yakov = $names[2];

Если массив большой, то такой способ присвоения элементов массива переменным не очень удобен.

Есть более рациональный подход - использование функции list():

list ($alex, $nick, $yakov) = $names;

Если нам нужны только "Николай" и "Яков", то мы можем сделать так:

list (, $nick, $yakov) = $names;

Функция array()

Функция Array() используется специально для создания массивов. При этом она позволяет создавать пустые массивы. Вот методы использования функции Array():

<?php
// Создает пустой массив:
$arr = array();
// Создает список с тремя элементами. Индексы начинаются с нуля:
$arr2 = array("Иванов","Петров","Сидоров");
// Создает ассоциативный массив с тремя элементами:
$arr3 = array("Иванов"=>"Иван", "Петров"=>"Петр", "Сидоров"=>"Сидор");
// Создает многомерный ассоциативный массив:
$arr4 = array("name"=>"Иванов", "age"=>"24", "email"=>"ivanov@mail.ru");
$arr4 = array("name"=>"Петров", "age"=>"34", "email"=>"petrov@mail.ru");
$arr4 = array("name"=>"Сидоров", "age"=>"47", "email"=>"sidorov@mail.ru");
?>

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

Сортировка массивов

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

Сортировка массива по значениям c помощью функций asort() и arsort():

Функция asort() сортирует массив, указанный в ее параметре, так, чтобы его значения шли в алфавитном (если это строки) или в возрастающем (для чисел) порядке.
При этом сохраняются связи между ключами и соответствующими им значениями, т. е. некоторые пары ключ=>значение просто "всплывают" наверх, а некоторые — наоборот, "опускаются". Например:

$A=array("a"=>"Zero","b"=>"Weapon","c"=>"Alpha","d"=>"Processor");
asort($A);
foreach($A as $k=>$v) echo "$k=>$v ";
// выводит "c=>Alpha d=>Processor b=>Weapon a=>Zero"
// как видим, поменялся только порядок пар ключ=>значение

Функция arsort() выполняет то же самое, за одним исключением: она упорядочивает массив не по возрастанию, а по убыванию.

Сортировка по ключам с помощью функций ksort() и krsort():

Функция ksort() практически идентична функции asort(), с тем различием, что сортировка осуществляется не по значениями, а по ключам (в порядке возрастания).
Например:

$A=array("d"=>"Zero", "c"=>"Weapon", "b"=>"Alpha", "a"=>"Processor");
ksort($A);
for(Reset($A); list($k,$v)=each($A);) echo "$k=>$v ";
// выводит "a=>Processor b=>Alpha c=>Weapon d=>Zero"

Функция для сортировки по ключам в обратном порядке называется krsort() и применяется точно в таком же контексте, что и ksort().

Сортировка по ключам при помощи функции uksort():

Довольно часто нам приходится сортировать что-то по более сложному критерию, чем просто по алфавиту. Например, пусть в $Files хранится список имен файлов и подкаталогов в текущем каталоге. Возможно, мы захотим вывести этот список не только в лексикографическом порядке, но также и чтобы все каталоги предшествовали файлам. В этом случае нам стоит воспользоваться функцией uksort(), написав предварительно функцию сравнения с двумя параметрами, как того требует uksort().

<?php
// Эта функция должна сравнивать значения $f1 и $f2 и возвращать:
// -1, если $f1<$f2,
// 0, если $f1==$f2
// 1, если $f1>$f2
// Под < и > понимается следование этих имен в выводимом списке
function FCmp($f1,$f2)
{ // Каталог всегда предшествует файлу
if(is_dir($f1) && !is_dir($f2)) return -1;
// Файл всегда идет после каталога
if(!is_dir($f1) && is_dir($f2)) return 1;
// Иначе сравниваем лексикографически
if($f1<$f2) return -1; elseif($f1>$f2) return 1; else return 0;
}
// Пусть $Files содержит массив с ключами — именами файлов
// в текущем каталоге. Отсортируем его.
uksort($Files,"FCmp"); // передаем функцию сортировки "по ссылке"
?>

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

Сортировка по значениям при помощи функции uasort()

Функция uasort() очень похожа на uksort(), с той разницей, что сменной (пользовательской) функции сортировки "подсовываются" не ключи, а очередные значения из массива. При этом также сохраняются связи в парах ключ=>значение.

Переворачивание массива с помощью функции array_reverce()

Функция array_reverse() возвращает массив, элементы которого следуют в обратном порядке относительно массива, переданного в параметре. При этом связи между ключами и значениями, конечно, не теряются. Например, вместо того, чтобы ранжировать массив в обратном порядке при помощи arsort(), мы можем отсортировать его в прямом порядке, а затем перевернуть:

$A=array("a"=>"Zero","b"=>"Weapon","c"=>"Alpha","d"=>"Processor");
asort($A);
$A=array_reverse($A);

Конечно, указанная последовательность работает дольше, чем один-единственный вызов arsort().

Сортировка списка при помощи функций sort() и rsort()

Эти две функции предназначены в первую очередь для сортировки списков.

Функция sort() сортирует список (разумеется, по значениям) в порядке возрастания, а rsort() — в порядке убывания. Пример для функции sort():

<?php
$A=array("40", "20", "10", "30");
sort($A);
for($i=0; $i<count($A); $i++) echo "$A[$i]"."<br>";
// выводит 10 20 30 40
?>

Перемешивание списка с помощью функции shuffle()

Функция shuffle() "перемешивает" список, переданный ей первым параметром, так, чтобы его значения распределялись случайным образом. Обратите внимание, что, во-первых, изменяется сам массив, а во вторых, ассоциативные массивы восприимаются как списки. Пример:

$A=array(10,20,30,40,50);
shuffle($A);
foreach($A as $v) echo "$v ";

Приведенный фрагмент кода выводит числа 10, 20, 30, 40 и 50 в случайном порядке.

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

Операции с ключами и значениями массива

array_flip(array $arr)

Функция array_flip() "пробегает" по массиву и меняет местами его ключи и значения. Исходный массив $arr не изменяется, а результирующий массив просто возвращается.
Конечно, если в массиве присутствовали несколько элементов с одинаковыми значениями, учитываться будет только последний из них:

$A=array("a"=>"aaa", "b"=>"aaa", "c"=>"ccc");
$A=array_flip($A);
// теперь $A===array("aaa"=>"b", "ccc"=>"c");

array_keys(array $arr [,mixed $SearchVal])

Функция array_keys() возвращает список, содержащий все ключи массива $arr. Если задан необязательный параметр $SearchVal, то она вернет только те ключи, которым соответствуют значения $SearchVal.

Фактически, эта функция с заданным вторым параметром является обратной по отношению к оператору [] — извлечению значения по его ключу.

array_values(array $arr)

Функция array_values() возвращает список всех значений в ассоциативном массиве $arr. Очевидно, такое действие бесполезно для списков, но иногда оправдано для хэшей.

in_array(mixed $val, array $arr)

Функция in_array() возвращает true, если элемент со значением $val присутствует в массиве $arr.
Впрочем, если вам часто приходится проделывать эту операцию, подумайте: не лучше ли будет воспользоваться ассоциативным массивом и хранить данные в его ключах, а не в значениях? На этом вы можете сильно выиграть в быстродействии.

array_count_values(list $List)

Функция array_count_values() подсчитывает, сколько раз каждое значение встречается в списке $List, и возвращает ассоциативный массив с ключами — элементами списка и значениями — количеством повторов этих элементов. Иными словами, функция array_count_values() подсчитывает частоту появления значений в списке $List. Пример:

$List=array(1, "hello", 1, "world", "hello");
array_count_values($array);
// возвращает array(1=>2, "hello"=>2, "world"=>1)



Источник: php.su
Категория: Общие вопросы | Добавил: PHP (27.11.2008)
Просмотров: 11369 | Теги: массив, операции
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Copyright Viktor L.P. © 2017 Бесплатный конструктор сайтов - uCoz
down
Функции для работы с массивами и операции над массивами - Общие вопросы - Уроки - Статьи, уроки - Уроки и статьи по PHP
Главная » Статьи » Уроки » Общие вопросы

Функции для работы с массивами и операции над массивами

Функции для работы с массивами

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

Функция list()

Предположим, у нас есть массив, состоящий из трех элементов:

$names[0]="Александр";
$names[1]="Николай";
$names[2]="Яков";

Допустим, в какой-то момент нам нужно передать значения всех трех элементов массива, соответственно трем переменным: $alex, $nick, $yakov. Это можно сделать так:

$alex = $names[0];
$nick = $names[1];
$yakov = $names[2];

Если массив большой, то такой способ присвоения элементов массива переменным не очень удобен.

Есть более рациональный подход - использование функции list():

list ($alex, $nick, $yakov) = $names;

Если нам нужны только "Николай" и "Яков", то мы можем сделать так:

list (, $nick, $yakov) = $names;

Функция array()

Функция Array() используется специально для создания массивов. При этом она позволяет создавать пустые массивы. Вот методы использования функции Array():

<?php
// Создает пустой массив:
$arr = array();
// Создает список с тремя элементами. Индексы начинаются с нуля:
$arr2 = array("Иванов","Петров","Сидоров");
// Создает ассоциативный массив с тремя элементами:
$arr3 = array("Иванов"=>"Иван", "Петров"=>"Петр", "Сидоров"=>"Сидор");
// Создает многомерный ассоциативный массив:
$arr4 = array("name"=>"Иванов", "age"=>"24", "email"=>"ivanov@mail.ru");
$arr4 = array("name"=>"Петров", "age"=>"34", "email"=>"petrov@mail.ru");
$arr4 = array("name"=>"Сидоров", "age"=>"47", "email"=>"sidorov@mail.ru");
?>

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

Сортировка массивов

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

Сортировка массива по значениям c помощью функций asort() и arsort():

Функция asort() сортирует массив, указанный в ее параметре, так, чтобы его значения шли в алфавитном (если это строки) или в возрастающем (для чисел) порядке.
При этом сохраняются связи между ключами и соответствующими им значениями, т. е. некоторые пары ключ=>значение просто "всплывают" наверх, а некоторые — наоборот, "опускаются". Например:

$A=array("a"=>"Zero","b"=>"Weapon","c"=>"Alpha","d"=>"Processor");
asort($A);
foreach($A as $k=>$v) echo "$k=>$v ";
// выводит "c=>Alpha d=>Processor b=>Weapon a=>Zero"
// как видим, поменялся только порядок пар ключ=>значение

Функция arsort() выполняет то же самое, за одним исключением: она упорядочивает массив не по возрастанию, а по убыванию.

Сортировка по ключам с помощью функций ksort() и krsort():

Функция ksort() практически идентична функции asort(), с тем различием, что сортировка осуществляется не по значениями, а по ключам (в порядке возрастания).
Например:

$A=array("d"=>"Zero", "c"=>"Weapon", "b"=>"Alpha", "a"=>"Processor");
ksort($A);
for(Reset($A); list($k,$v)=each($A);) echo "$k=>$v ";
// выводит "a=>Processor b=>Alpha c=>Weapon d=>Zero"

Функция для сортировки по ключам в обратном порядке называется krsort() и применяется точно в таком же контексте, что и ksort().

Сортировка по ключам при помощи функции uksort():

Довольно часто нам приходится сортировать что-то по более сложному критерию, чем просто по алфавиту. Например, пусть в $Files хранится список имен файлов и подкаталогов в текущем каталоге. Возможно, мы захотим вывести этот список не только в лексикографическом порядке, но также и чтобы все каталоги предшествовали файлам. В этом случае нам стоит воспользоваться функцией uksort(), написав предварительно функцию сравнения с двумя параметрами, как того требует uksort().

<?php
// Эта функция должна сравнивать значения $f1 и $f2 и возвращать:
// -1, если $f1<$f2,
// 0, если $f1==$f2
// 1, если $f1>$f2
// Под < и > понимается следование этих имен в выводимом списке
function FCmp($f1,$f2)
{ // Каталог всегда предшествует файлу
if(is_dir($f1) && !is_dir($f2)) return -1;
// Файл всегда идет после каталога
if(!is_dir($f1) && is_dir($f2)) return 1;
// Иначе сравниваем лексикографически
if($f1<$f2) return -1; elseif($f1>$f2) return 1; else return 0;
}
// Пусть $Files содержит массив с ключами — именами файлов
// в текущем каталоге. Отсортируем его.
uksort($Files,"FCmp"); // передаем функцию сортировки "по ссылке"
?>

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

Сортировка по значениям при помощи функции uasort()

Функция uasort() очень похожа на uksort(), с той разницей, что сменной (пользовательской) функции сортировки "подсовываются" не ключи, а очередные значения из массива. При этом также сохраняются связи в парах ключ=>значение.

Переворачивание массива с помощью функции array_reverce()

Функция array_reverse() возвращает массив, элементы которого следуют в обратном порядке относительно массива, переданного в параметре. При этом связи между ключами и значениями, конечно, не теряются. Например, вместо того, чтобы ранжировать массив в обратном порядке при помощи arsort(), мы можем отсортировать его в прямом порядке, а затем перевернуть:

$A=array("a"=>"Zero","b"=>"Weapon","c"=>"Alpha","d"=>"Processor");
asort($A);
$A=array_reverse($A);

Конечно, указанная последовательность работает дольше, чем один-единственный вызов arsort().

Сортировка списка при помощи функций sort() и rsort()

Эти две функции предназначены в первую очередь для сортировки списков.

Функция sort() сортирует список (разумеется, по значениям) в порядке возрастания, а rsort() — в порядке убывания. Пример для функции sort():

<?php
$A=array("40", "20", "10", "30");
sort($A);
for($i=0; $i<count($A); $i++) echo "$A[$i]"."<br>";
// выводит 10 20 30 40
?>

Перемешивание списка с помощью функции shuffle()

Функция shuffle() "перемешивает" список, переданный ей первым параметром, так, чтобы его значения распределялись случайным образом. Обратите внимание, что, во-первых, изменяется сам массив, а во вторых, ассоциативные массивы восприимаются как списки. Пример:

$A=array(10,20,30,40,50);
shuffle($A);
foreach($A as $v) echo "$v ";

Приведенный фрагмент кода выводит числа 10, 20, 30, 40 и 50 в случайном порядке.

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

Операции с ключами и значениями массива

array_flip(array $arr)

Функция array_flip() "пробегает" по массиву и меняет местами его ключи и значения. Исходный массив $arr не изменяется, а результирующий массив просто возвращается.
Конечно, если в массиве присутствовали несколько элементов с одинаковыми значениями, учитываться будет только последний из них:

$A=array("a"=>"aaa", "b"=>"aaa", "c"=>"ccc");
$A=array_flip($A);
// теперь $A===array("aaa"=>"b", "ccc"=>"c");

array_keys(array $arr [,mixed $SearchVal])

Функция array_keys() возвращает список, содержащий все ключи массива $arr. Если задан необязательный параметр $SearchVal, то она вернет только те ключи, которым соответствуют значения $SearchVal.

Фактически, эта функция с заданным вторым параметром является обратной по отношению к оператору [] — извлечению значения по его ключу.

array_values(array $arr)

Функция array_values() возвращает список всех значений в ассоциативном массиве $arr. Очевидно, такое действие бесполезно для списков, но иногда оправдано для хэшей.

in_array(mixed $val, array $arr)

Функция in_array() возвращает true, если элемент со значением $val присутствует в массиве $arr.
Впрочем, если вам часто приходится проделывать эту операцию, подумайте: не лучше ли будет воспользоваться ассоциативным массивом и хранить данные в его ключах, а не в значениях? На этом вы можете сильно выиграть в быстродействии.

array_count_values(list $List)

Функция array_count_values() подсчитывает, сколько раз каждое значение встречается в списке $List, и возвращает ассоциативный массив с ключами — элементами списка и значениями — количеством повторов этих элементов. Иными словами, функция array_count_values() подсчитывает частоту появления значений в списке $List. Пример:

$List=array(1, "hello", 1, "world", "hello");
array_count_values($array);
// возвращает array(1=>2, "hello"=>2, "world"=>1)



Источник: php.su
Категория: Общие вопросы | Добавил: PHP (27.11.2008)
Просмотров: 11369 | Теги: массив, операции
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]