Главная > Программирование > РНР: настольная книга программиста
<< Предыдущий параграф
Следующий параграф >>
<< Предыдущий параграф Следующий параграф >>
Макеты страниц

20.3. Функции возвращения

Для более удобного программирования принято использовать своего рода указатели в массивах, т. е. $а => "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 (0, 3, 4)

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

В нашем случае это "машина". В результате данная функция вернет следующий массив:

array(0,3,4);

Это номера индексов, под которыми значения массива соответствует искомому значению "машина".

Пример 20.8. Функция array_keys (вариант 3)

$array = array("color" => array("blue", "red", "green"), "size" = > array ("small", "medium", "large"));

array_keys ($array); // результат array("color", "size")

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


ВНИМАНИЕ

Эти операции необходимо было проделать в РНР 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;

    }

}


Она помогает реализовать тот же принцип, но в данный момент уже устарела, поэтому лучше пользоваться array_values, так вы сможете сэкономить время и энергию.

Пример выполнения array_values():

$array = array("размер" => "XXL", "марка" => "BMW"); array_values($array) ; // возвращается array("XXL", "BMW")

Результатом выполнения данного кода будет массив, состоящий из значений «ХХL», «BMW».

Чтобы поменять местами значения массива, существует много разных функций, все зависит от того, в каком направлении действовать. Если необходимо поменять элементы в обратном порядке, применяется функция array_revers():

array array_reverse(array array [, bool preserve_keys])

Введена в версию РНР 4 и старше, чем 4.0b4.

Если будет указана как true, то значения переменных массива изменят свое местоположение, а индексы останутся на прежнем месте. Например:

$input = array("мама", 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 возвращает

Приведем пример:

<?

$input = array("php", 4.0, array("green", "red"));

$my = current($input);

$result_keyed = array_reverse ($input, true);

$my1 = current($result_keyed);

print_r($my);

print_r($my1);

?>

Результат выполнения данной программы:

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 => 0

1 => 'саша'

key => 0

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(), следует уделить внимание и функции Она имеет аналогичный принцип работы, единственное отличие — возвращаемое значение в переменную. Функция in_array возвращает значение true (истина) или false, а эта функция — значения индекса переменной, которым обозначается данная переменная, т. е. s[1] = 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 равен 0

Индекс значения NTT равен 1

Индекс значения World равен 2

Индекс значения New равен 3

Array ([0] => Hello [1] => NTT [2] => World [3] => New)

Обратите внимание, что все значения, которые возвращает функция, строго совпадают с нумерацией индекса.

<< Предыдущий параграф Следующий параграф >>
Оглавление