Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Комплексная замена в строке

Создание массива

array
Создание и инициализация массива.

Синтаксис:
array array([mixed...])

Функция возвращает созданный массив. Индексы и значения в массиве разделяются оператором =>. Пары index=>value разделяются запятыми, они определяют индекс и значение.
Индекс может быть как числовым, так и строковым. В ассоциированных массивах индекс всегда ведет себя как строковой. В случае, если индекс не указан, будет подставляться автоинкремент (на 1 больше), начиная с 0. Если при создании массива были указаны два элемента с одинаковыми индексами, то последний элемент заменяет первый.

$arr=array(// Далее мы создадим двумерный массив

"fruit" => array("a"=>"orange", "b"=>"banan", "c"=>"apple"),

// эта запись эквивалентна записи: $arr["fruit"]["a"]="orange"; и т.д.

"number" => array(1,2,3,4,5,6),

// эта запись эквивалентна записи: $arr["number"][]=1; и т.д.

"hotel" => array("first", 5=>"second", "third")

);

$arr=array(1, 1, 1, 1, 2=>5, 19, 3=>20);

print_r($arr);

// Далее распечатка этого массива

Array

(

[0] => 1

[1] => 1

[2] => 5

[3] => 20

[4] => 19

)

$arr=array(1 => "Январь", "Февраль", "Март");

print_r($arr);

// распечатка

Array

(

[1] => Январь

[2] => Февраль

[3] => Март

)

range
Заполняет список целыми числами.

Синтаксис:
list range(int low, int high)

Функция range() создает список, заполненный целыми числами от low до high включительно. Ее удобно применять, если мы хотим быстро сгенерировать массив для последующего прохождения по нему циклом forech.

$arr=range(4,9);

// теперь $arr = array(4, 5, 6, 7, 8, 9);

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

array_reverse
Расстановка элементов массива в обратном порядке.

Синтаксис:
array array_reverse(array arr);

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

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

 

asort($A);

 

$A = array_reverse($A);

shuffle
Перемешивание элементов массива.

Синтаксис:
void shuffle(array arr);

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

$A = array(10,20,30,40,50);

shuffle($A);

foreach($A as $v) echo "$v ";

// Выведет 10,20,30,40,50 в случайном порядке

sort
Сортировка массива по возрастанию.

Синтаксис:
void sort(array arr [, int sort_flags])

Эта функция предназначена для сортировки списков (списки - массивы, ключи которых начинаются с 0 и не имеют пропусков) в порядке возрастания.

$A = array("One", "Two", "Tree", "Four");

sort($A);

for($i=0; $i<count($A); $i++) echo "$i:$A[$i] ";

// выводит "0:Four 1:Two 2:Tree 3:One"

Любой ассоциативный массив Воспринимается этой функцией как список. То есть после упорядочивания последовательность ключей превращается в 0,1,2,..., а значения нужным образом перераспределяются. Как видим, связи между параметрами ключ=>значение не сохраняются, более того - ключи просто пропадают, поэтому сортировать что-либо, отличное от списка, вряд ли целесообразно.

Аргумент sort_flags задает следующие флаги сортировки:

 SORT_REGULAR - сравнивает элементы "как есть"

 SORT_NUMERIC - сравнивает элементы как числа

 SORT_STRING - сравнивает элементы как строки

rsort
Сортировка массива по убыванию.

Синтаксис:

void rsort(array arr [, int sort_flags])

Аналогична функции sort(), только сортирует по убыванию.

asort
Сортировка ассоциативного массива по возрастанию.

Синтаксис:
void asort(array arr [, int sort_flags]);

Функция 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"

// как видим, поменялся только порядок пар ключ=>значение

По умолчанию функция asort() сортирует массив в алфавитном порядке. Значения флагов сортировки sort_flags приведены в описании функции sort().

arsort
Сортировка ассоциативного массива по убыванию.

Синтаксис:
void arsort(array arr [, int sort_flags]);

Эта функция аналогична функции asort(), только она упорядочивает массив не по возрастанию, а по убыванию.

$arr=array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");

arsort($arr);

reset($arr);

while(list ($key, $val) = each ($arr)) {

echo "$key = $val<BR&gtl";

}

// выведет:

a = orange

d = lemon

b = banana

c = apple

ksort
Сортировка массива по возрастанию ключей.

Синтаксис:
int ksort(array arr [, int sort_flags]);

Функция практически идентична функции 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"

Аргумент sort_flags указывавет параметры сортировки.

krsort
Сортировка массива по убыванию индексов.

Синтаксис:
int krsort(array arr [, int sort_flags]);

Эта функция аналогична функции ksort(), только она упорядочивает массив по ключам в обратном порядке.

natsort
Выполняет "естественную" сортировку массива.

Синтаксис:
void natsort(array arr);

Функция natsort() сортирует массив в "естественном" для человека порядке.

$arr1 = array("html_12.html", "html_10.html", "html_2.html", "html_1.html");

$arr2 = $arr1;

sort($arr1);

echo "Стандартная сортировка:\n";

print_r($arr1);

natsort($arr2);

echo "Естественная сортировка:\n"

print_r($arr2);

Этот пример выведет следующее:

Стандартная сортировка:

Array

(

[0] => html_1.html

[1] => html_10.html

[2] => html_12.html

[3] => html_2.html

)

Естественная сортировка:

Array

(

[3] => html_1.html

[2] => html_2.html

[1] => html_10.html

[0] => html_12.html

)

uasort
Пользовательская сортировка ассоциативного массива.

Синтаксис:
void uasort(array arr, function cmp_function)

Функция uasort() сортирует массив arr с сохранением индексных ассоциаций, используя для сравнения индексов элементов пользовательскую функцию, указанную аргументом cmp_function.

uksort
Пользовательская сортировка массива по ключам.

Синтаксис:
void uksort(array arr, function cmp_function)

Функция uksort() сортирует массив arr по индексам с сохранением индексных ассоциаций, используя для сравнения индексов элементов пользовательскую функцию, указанную в аргументе cmp_function. В эту функцию передаются два сравниваемых индекса элементов, а она должна вернуть положительное или отрицательное число или 0.

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

// Эта функция должна сравнивать значения $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"); //передаем функцию сортировки "по ссылке"

usort
Пользоваетльская сортировка массива.

Синтаксис:
void usort(array arr, function cmp_function)

Функция usort() сортирует массив arr с сохранением индексных ассоциаций, используя для сравнения индексов элементов пользовательскую функцию, указанную в аргументе cmp_function. В эту функцию передаются два сравниваемых индекса элементов, а она должна вернуть положительное или отрицательное число или 0.

Эта функция как бы является "гибридом" функций uasort() и sort(). От sort() она отличается тем, что критерий сравнения обеспечивается пользовательской функцией. А от uasort() - тем, что она не сохраняет связей между ключами и значениями, а потому пригодна разве что для сортировки списков.

function FCmp($a,$b) { return strcmp($a,$b); }

$A = array("One","Two","Three","Four");

usort($A);

for($i=0; $i<count($A); $i++) echo "$i:$A[$i] ";

// выводит "0:Four 1:One 2:Three 3:Two"

Пример одномерного массива:

function cmp($a, $b) {

if($a==$b) return 0;

return ($a > $b)? -1: 1;

}

$a=array (3,2,5,6,1);

usort($a, "cmp");

while(list($key,$val)=each($a)) {

echo "$key: $val\n";

}

При выполнении будет напечатано:

0: 6

1: 5

2: 3

3: 2

4: 1

Пример многомерного массива:

function cmp($a,$b) {

return strcmp($a["fruit"],$b["fruit"]);

};

$fruit[0]["fruit"]="lemons";

$fruit[1]["fruit"]="apples";

$fruit[2]["fruit"]="grapes";

 

usort($fruit, "cmp");

 

while(list($key,$val)=each($fruit)) {

echo "\$fruit[$key]:".$val["fruit"]."\n";

}

При сортировке многомерных массивов $a и $b содержит ссылки на первый индекс массива.
Будет напечатано:

$fruit[0]: apples

$fruit[1]: grapes

$fruit[2]: lemons

array_multisort
Сортировка релятивных массивов.

Синтаксис:
bool array_multisort(array ar1, [, mixed o1 [, mixed t1... [, array...]]])

Функция array_multisort() сортирует многомерные массивы с сохранением индексной ассоциации, возвращая true при отсутствии ошибок.

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

Флаги определения порядка сортировки (аргументы ox):

 SORT_ASC - сортировка в порядке возрастания (по умолчанию)

 SORT_DESC - сортировка в порядке убывания Флаги типа сортировки (аргументы tx):

 SORT_REGULAR - сравнивать элементы как есть (по умолчанию)

 SORT_NUMERIC - сравнивать элементы как числа

 SORT_STRING - сравнивать элементы как строки

ar1 = array("10", 100, 100, "a");

ar2 = array(1, 3, "2", 1);

array_multisort($ar1, $ar2);

// $ar1 = array("10", "a", 100, 100);

// $ar2 = array(1, 1, "2", 4);

Элементы второго массива, соответствующие одинаковым элементам (100 и 100) первого массива, также отсортированны.

$ar = array(array("10", 100, 100, "a"), array(1, 3, "2", 1));

array_multisort($ar[0], SORT_ASC, SORT_STRING,

$ar[1], $SORT_NUMERIC, SORT_DESC);

$ar[0] = ("10", 100, 100, "a") - сортируются как строки по возрастанию $ar[1] = (1, 3, "2", 1) - сортируются как числа по убыванию

Ключи и значения

array_flip
Меняет местами индексы и значения массива.

Синтаксис:
array array_flip(array arr)

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

$A = array("a"=>"aaa", "b"=>"aaa", "c"=>"ccc");

 

$A = array_flip($A);

 

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

array_keys
Возвращает список из ключей массива.

Синтаксис:
list array_keys(array arr [,mixed search_value])

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

$arr = array(0 => 100, "color" => "red", 15);

array_keys($arr); // возвратит array(0, "color", 1)

 

$arr = array("blue", "red", "green", "blue", "blue");

array_keys($arr, "blue"); // возвратит array(0, 3, 4)

array_values
Удаление ассоциативных индексов массива.

Синтаксис:
list array_values(array arr)

Функция array_values() возвращает список всех значений в ассоциативном массиве arr, т.е. превращает ассоциативный массив в простой (скалярный).

$arr = array("size" => "XL", "color" => "gold");

array_values($arr);

// возвратит array("XL", "gold")

Очевидно, такое действие бесполезно для списков, но иногда оправданно для хешей.

in_array
Осуществляет проверку массива на наличие значения.

Синтаксис:
bool in_array(mixed val, array arr)

Функция in_array() возвратит true, если в массиве arr содержится элемент со значением var.

$arr = array("1", "2", "tree");

if(in_array["2", $arr)) echo "2 есть";

array_count_values
Возвращает количество одинаковых значений массива.

Синтаксис:
array array_count_values(array arr)

Эта функция подсчитывает, сколько раз каждое значение встречается в массиве arr, и возвращает ассоциативный массив с ключами - элементами массива и значениями - количеством повторов этих элементов. Иными словами, функция array_count_values() подсчитывает частоту появления значений в массиве arr.

$LIst = array(1, "hello", 1, "world", "hello");

array_count_values($array);

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

sizeof
Возвращает число элементов массива.

Синтаксис:
int sizeof(array arr)

Функция sizeof() возвращает количество элементов в массиве arr на подобие действия функции count().

count
Возвращает число элементов в массиве или объекте.

Синтаксис:
int count(mixed var)

Функция count() возвращает число элементов в массиве или объекте var. В случае, если var - скалярная переменная, то функция возвращает 1, если такая переменная существует, или 0, если такой переменной нет.
Надо отметить, что 0 возвращается и тогда, когда указан массив, не содержащий элементов.
Для проверки существования переменной лучше воспользоваться функцией isset().

$a[0] = 1;

$a[1] = 3;

$a[2] = 5;

$result = count($a) // возвратит 3

array_sum
Возвращает сумму всех элементов массива.

Синтаксис:
mixed array_sum(array arr [, int num_req])

Эта функция возватит сумму всех числовых элементов массива. От типа значений в массиве зависит тип возвращаемого числа (integer или float).

$arr = array(2,4,6,7);

echo "Сумма: ".array_sum($arr);

// выведет Сумма: 19

array_rand
Производит случайную выборку индексов массива.

Синтаксис:
mixed array_rand(array arr [, int num_req])

Функция array_rand() возвращает в массиве выбранные случайным образом индексы элементов массива arr.
Аргумент num_req указывает число возвращаемых индексов. В случае, если выбирается один элемент, то возвращается не массив, а значение.

srand((double)microtime() *1000000);

// здесь мы проинициализировали генератор случайных чисел

$arr = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank");

$rand_keys = array_rand($arr, 2);

echo $arr[$rand_key[0]]."<BR>";

echo $arr[$rand_key[1]]."<BR>";

Комплексная замена в строке

strtr
Комплексная замена в строке.

Синтаксис:
string strtr(string str, string from, string to)
string strtr(string str, array from)

В первом случае функция strtr() возвращает строку str, у которой каждый символ, присутствующий в строку from, заменяется на корреспондирующий из строки to. В случае, если строки from и to различной длины, то лишние конечные символы длинной строки игнорируются.

Во втором случае функция strtr() возвращает строку, в которой фрагменты строки str заменяются на соответствующие индексам значения элементов массива from. При этом функция пытается заменить сначало наибольшие фрагменты исходной строки и не выполняет замену в уже модифицированных частях строки. Таким бразом, теперь мы можем выполнить несколько замен сразу:

$Subs = array(

"<name>" => "Larry",

"<time>" => date("d.m.Y")

);

$st="Привет, <name>! Сейчас <time";

echo strtr($st,$Subs);

А вот как можно "отменить" действие функции HtmlSpecialChars():

$Trans=array_flip(get_html_translation_table());

$st=strtr($st, $Trans);

В результате мы из строки, в которой все спецсимволы заменены на их HTML-эквиваленты, получим исходную строку.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...