Для более удобного программирования принято использовать своего рода указатели в массивах, т. е. $а => "hello". Иногда необходимо осуществить работу именно с самими указателями. Получить доступ к ним помогает функция array_keys(). Эта функция возвращает массив значений с указателями, которые были применены в массивах, приведенных в данной функции. Ее синтаксис: array array_keys (array input [, mixed search_value]) Данная функция введена в PHP 4. Приведем примеры применения данной функции. Пример 20.6. Функция array_keys (вариант 1) $array = array (0 => 100, "color", => "red"); array_keys($array); // результат array (0, "color") Данный пример возвращает массив array (0, "color"). Пример 20.7. Функция array_keys (вариант 2) $array = array ("машина", "дом", "компьютер", "машина", "машина"); array_keys($array, "машина"); // результат array (О, 3, 4) Когда указателей нет, то после определения массива, с которым должна работать функция, также указывается значение, на какое именно ей стоит обращать внимание. В нашем случае это "машина". В результате данная функция вернет следующий массив: Array(0,3,4); Это номера индексов, под которыми значения массива соответствует искомому значению "машина". Пример 20.8. Функция аrrау_кеуs(вариант 3) $array = array ("color" => array ("blue", "red", "green"), "size" = > array ("small", "medium", "large")); array_keys ($array); // результат array("color", "size") Даже если сами указатели работают непосредственно с массивами, функция аrrау_кеуs все равно будет возвращать массив указателей заданного в ней массива. Это иногда очень полезно и помогает избавиться от ненужных громоздких выражений вычисления, которые необходимо проделать, чтобы получить массив со значениями. ВНИМАНИЕ Эти операции необходимо было проделать в РНР 3, так как функция array_keys включена только в РНР 4. Приведем пример: function array_keys($arr, $term="") { $t = array (); while (list($k, $v) =each($arr)) { if ($term && $v != $term) continue; $t[] = $k; } return $t; }
Рассмотрим функцию array_values, похожую по принципу действия на array_key (). Она предназначена для получения массива значений из массивов, внесенных в нее. Другими словами, функция array_key находит ссылки и создает массив из них, а функция array_value работает по тому же принципу, только она находит все значения, не обращая внимания на ссылки (указатели в этих массивах) , и также создает массив из найденных значений: array array_values(array input) Применяется в РНР 4 и старше. ВНИМАНИЕ В РНР 3 для этой цели использовали следующую функцию: function array_values($arr) { $t = array () ; while (list($k, $v) = each ($arr) ) { $t[] = $v; return $t; } Она помогает реализовать тот же принцип, но в данный момент уже устарела, поэтому лучше пользоваться arrayvalues, так вы сможете сэкономить время и энергию. Пример выполнения array_values (): $array = array("размер" => "XXL", "марка" => "BMW"); array_values($array); // возвращается array ("XXL", "BMW") Результатом выполнения данного кода будет массив, состоящий из значений «XXL», «BMW». Чтобы поменять местами значения массива, существует много разных функций, все зависит от того, в каком направлении действовать. Если необходимо поменять элементы в обратном порядке, применяется функция arrayrevers (): array array^reverse(array array [, bool preserve_keys]) Введена в версию РНР 4 и старше, чем 4.0b4. Если preserve_keys будет указана как true, то значения переменных массива изменят свое местоположение, а индексы останутся на прежнем месте. Например: $input = аrrау(мама", 4.0, array ("папа", "сестра")); $result = array_reverse($input); // первый случай $result_keyed = array_reverse ($input, true); // второй случай В первом случае получим: Array ([0] => Array ( [0] => папа [1] => сестра) [1] => 4 [2] => мама). Во втором случае результат будет следующий: Array ([2] => Array ([0] => папа [1] => сестра) [1] => 4 [0] => мама) Обратите внимание, что значение "мама" в первом случае находится в массиве под индексом, равным 2, а во втором случае индекс своего значения не изменил, т. е. остался равным нулю.
Параметр функции array_reserve - preserve_keys добавлен в функцию в РНР 4.0.3. Как правило, каждый массив имеет свой внутренний указатель на текущий элемент, который изначально стоит на первом элементе, вставленном в матрицу. Функция current () просто возвращает элемент массива, на котором находится внутренний указатель. Это не перемещает указатель. Если внутренние точки указателя вне списка элементов, то функция current () возвращает false. Приведем пример: <? $input = array("php", 4.0, array ("green", "red")) ; $my = current ($input); $result_keyed = array_reverse ($input, true) ; $myl = current ($result_keyed) ; printer ($my); print_r($myl); ?> Результат выполнения данной программы: php Array { [0] => green [1] => red) Это те самые первые значения, о которых было сказано выше. ВНИМАНИЕ Если матрица содержит пустые элементы (0 или "" - пустая строка), тогда эта функция возвратит false для этих элементов. При использовании функции current () могут возникнуть проблемы при определении, находится ли указа¬тель действительно в конце списка такого массива или нет. Чтобы более подробно узнать о свойствах массива, а в частности о том, может он состоять из пустого элемента или нет, используйте функцию each (). Данная функция возвращает значение текущего указателя и непосредственно само значение элемента в массиве. Синтаксис: array each(array array) Функция возвращает значение индекса матрицы и его переменной (текущее) и передвигает курсор в массиве. Эти значения возвращаются в четырехэлементной матрице со значениями 0, 1, указателем и значением. Элементы 0 и указатель содержат ключевое название эле¬мента массива, а 1 и значение содержат данные.
Если внутреннийуказателъматричных точек проходит мимо всех значений, функция each () возвращает false. Приведем пример: $new = array ("саша", "игорь", "таня", "валера", "катя", "надя"); $too = each ($new) ; Результатом выполнения данной программы будет массив, состоящий из следующих строк: 0 => О 1 => 'саша' key => О value => 'саша' Так как никаких манипуляций с указателем матрицы не было произведено, то key = 0;. Теперь произведем преобразования: $new = array ("Саша" => "Шурик", "Виталик" => "Виталь"); $bar = each($new); В итоге получим: 0 => 'Саша' 1 => 'Шурик' key => 'Саша' value => 'Шурик' Если необходимо проверить наличие какой-либо конкретной переменной в массиве, как правило, используют функцию in_array (). Функция введена в PHP 4. Она работает с условными операторами и возвращает булевуюпеременную: bool in_array(mixed значение, array имя_массива, bool strict) Как видно, данная функция производит поиск значения в массиве, в поле, где указана строка "имя_массива". Она возвращает true, если значение, которое ищется в данном массиве, было, найдено. Если переменная не была найдена, то данная функция возвращает false. Если в третьей строке данной функции bool strict установлен атрибут true, то функция in_array () осуществляет проверку типа "значения" в нашем массиве. <? $new = array("Hello", "NTT", "World", "New"); if (in_array ("NTT", $new) ) {
print "Значение NTT в массиве $new найдено \n";
print_r ($new); } ?> В первой строке данного примера задается массив $new со значениями: Hello, NTT, World, New. Далее, как и было сказано выше, используется оператор условия, в котором и происходит проверка. В нашем примере функция возвращает значение true, так как искомое значение существует в массиве. После этого выполняются функции print () и print_r () . Результат данной программы будет следующим: Значение переменной NTT в массиве Array найдено Array ([0] => Hello [1] => NTT [2] => World [3] => New) Поиск можно осуществлять также в более строгой форме, т. е. сравнивая помимо значения еще и тип. Например: <? $new = array ("Hello", "NTT", "World", "New"); if (in_array ("NTT", $new, true)) { print "Значение найдено в строгом соответствии с заданным типом"; ) ?> Результатом данной программы будет: Значение найдено в строгом соответствии с заданным типом Рассмотрев функцию in_array(), следует уделить внимание и функции array_search() . Она имеет аналогичный принцип работы, единственное отличие - возвращаемое значение в переменную. Функция in_array() возвращает значение true (истина) или false, а эта функция - значения индекса переменной, которым обозначается данная переменная, т. е. s[l] = 34; индексом является значение, равное 1. Искомое число в нашем случае будет 34. Синтаксис этой функции: mixed array_search (mixed needle, array haystack, bool strict) Приведем пример, характеризующий принципы работы данной функции: <? $new = array ("Hello", "NTT", "World", "New"); $a = array^search("Hello", $new,true); print "Индекс значения Hello равен $a<br>",-$b = array_search("NTT", $new,true); print "Индекс значения NTT равен $b<br>"; $с = array_search("World", $new,true); print "Индекс значения World равен $с <br>";' $d = array_search{"NeW", $new,true); print "Индекс значения New равен $d <br>"; print_r (?new); ?> Результат работы данной программы: Индекс значения Hello равен О Индекс значения NTT равен 1 Индекс значения World равен 2 Индекс значения New равен 3 Array ([0] => Hello [1] => NTT [2] => World [3] => New) Обратите внимание, что все значения, которые возвращает функция, строго совпадают с нумерацией индекса .