Комплексная замена в строке
Создание массива array Синтаксис: Функция возвращает созданный массив. Индексы и значения в массиве разделяются оператором =>. Пары index=>value разделяются запятыми, они определяют индекс и значение. $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 Синтаксис: Функция range() создает список, заполненный целыми числами от low до high включительно. Ее удобно применять, если мы хотим быстро сгенерировать массив для последующего прохождения по нему циклом forech. $arr=range(4,9); // теперь $arr = array(4, 5, 6, 7, 8, 9); Сортировка массивов array_reverse Синтаксис: Функция array_reverse() возвращает массив, элементы которого следуют в обратном порядке относительно массива, переданного в параметре. При этом связи между ключами и значениями, конечно, не теряются. Например, вместо того, чтобы ранжировать массив в обратном порядке при помощи arsort(), мы можем отсортировать его в прямом порядке, а затем перевернуть:
$A=array("a"=>"Zero","b"=>"Weapon","c"=>"Alpha","d"=>"Processor");
asort($A);
$A = array_reverse($A); shuffle Синтаксис: Функция shuffle() "перемешивает" список, переданный ей первым параметром arr, так, чтобы его значения распределялись случайным образом. При этом измениться сам массив и ассоциативные массивы воспринимаются как списки. $A = array(10,20,30,40,50); shuffle($A); foreach($A as $v) echo "$v "; // Выведет 10,20,30,40,50 в случайном порядке sort Синтаксис: Эта функция предназначена для сортировки списков (списки - массивы, ключи которых начинаются с 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 Синтаксис:
Функция 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 Синтаксис: Эта функция аналогична функции 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>l"; } // выведет: a = orange d = lemon b = banana c = apple 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" Аргумент sort_flags указывавет параметры сортировки. krsort Синтаксис: Эта функция аналогична функции ksort(), только она упорядочивает массив по ключам в обратном порядке. natsort Синтаксис: Функция 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 Синтаксис: Функция uasort() сортирует массив arr с сохранением индексных ассоциаций, используя для сравнения индексов элементов пользовательскую функцию, указанную аргументом cmp_function. uksort Синтаксис: Функция 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 Синтаксис: Функция 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 Синтаксис: Функция 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 Синтаксис: Эта функция "пробегает" по массиву и меняет местами его ключи и значения. Исходный массив arr не изменяется, а результирующий массив просто возвращается. Конечно, если в массиве присутствовало несколько элементов с одинаковыми значениями, учитываться будет только последний из них: $A = array("a"=>"aaa", "b"=>"aaa", "c"=>"ccc");
$A = array_flip($A);
// Теперь $A===array("aaa"=>"b", "ccc"=>"c"); array_keys Синтаксис: Функция возвращает список, содержащий все ключи массива 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 Синтаксис: Функция array_values() возвращает список всех значений в ассоциативном массиве arr, т.е. превращает ассоциативный массив в простой (скалярный). $arr = array("size" => "XL", "color" => "gold"); array_values($arr); // возвратит array("XL", "gold") Очевидно, такое действие бесполезно для списков, но иногда оправданно для хешей. in_array Синтаксис: Функция in_array() возвратит true, если в массиве arr содержится элемент со значением var. $arr = array("1", "2", "tree"); if(in_array["2", $arr)) echo "2 есть"; array_count_values Синтаксис: Эта функция подсчитывает, сколько раз каждое значение встречается в массиве arr, и возвращает ассоциативный массив с ключами - элементами массива и значениями - количеством повторов этих элементов. Иными словами, функция array_count_values() подсчитывает частоту появления значений в массиве arr. $LIst = array(1, "hello", 1, "world", "hello"); array_count_values($array); // возвращает array(1=>2, "hello"=>2, "world"=>1) sizeof Синтаксис: Функция sizeof() возвращает количество элементов в массиве arr на подобие действия функции count(). count Синтаксис: Функция count() возвращает число элементов в массиве или объекте var. В случае, если var - скалярная переменная, то функция возвращает 1, если такая переменная существует, или 0, если такой переменной нет. $a[0] = 1; $a[1] = 3; $a[2] = 5; $result = count($a) // возвратит 3 array_sum Синтаксис: Эта функция возватит сумму всех числовых элементов массива. От типа значений в массиве зависит тип возвращаемого числа (integer или float). $arr = array(2,4,6,7); echo "Сумма: ".array_sum($arr); // выведет Сумма: 19 array_rand Синтаксис: Функция array_rand() возвращает в массиве выбранные случайным образом индексы элементов массива arr. 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 Синтаксис: В первом случае функция 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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|