Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы на вопросы по МИРу.doc
Скачиваний:
2
Добавлен:
28.04.2019
Размер:
572.42 Кб
Скачать

4. Ассоциативные массивы

РНР поддерживает также ассоциативные массивы. В ассоциативным массиве с каждым значением можно связать любой ключ, или индекс.

Инициализация ассоциативного массива

Следующий код создает ассоциативный массив, в котором названия товаров используются в качестве ключей, а их цены — в качестве значений.

$prices = array( "Tires"=>100, "Oil"=>10, "Spark Plugs"=>4 );

Доступ к элементам массива

Как и ранее, доступ к содержимому осуществляется через имя переменной и ключ, поэтому к информации, сохраненной в массиве prices можно обратиться как к

$prices[ "Tires" ], $prices[ "Oil"] и Spicesf "Spark Plugs" ].

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

Следующий код создает этот же массив Sprices. Вместо создания массива с тремя элементами эта версия создает массив только с одним элементом, а затем добавляет в него еще два элемента.

$prices = array( "Tires"=>100 );

$prices["Oil"] = 10;

$prices["Spark Plugs"] = 4;

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

$prices["Tires"] = 100;

$prices["0il"] = 10;

$prices["Spark Plugs"] =4;

Организация циклов с использованием each() и List()

Поскольку в ассоциативном массиве индексы не являются числами, для работы с массивом нельзя использовать простой счетчик в цикле for. Следующий код выводит содержимое нашего массива $prices:

while( $element = each( $prices ) )

echo $element[ "key" ];

echo " - ";

echo $element[ "value" ] ;

echo "<br>";

Функция each() возвращает текущий элемент массива и делает текущим следующий элемент.

Функция List()- для разделения массива на ряд значений. Два значения, передаваемые функцией each(), можно разделить следующим образом:

$list( $product, $price ) = each( $prices ) ;

Эта строка использует функцию each() для получения текущего элемента из массива Sprices, возвращает его в виде массива и делает следующий элемент текущим.

Array_count_values() –функция возвращает массив, в котором ключами являются элементы массива, а количество встреченмости – значениями.

$a=array (1, ”sed” 1, ”sed”, “word”)

$w=array_count_values($a) вернет массив (1=>2, “sed”=>2 “word”=>1)

5. Создание пользовательских функций, передача параметров функции и области видимости переменных

Функция array_walk()

Достаточно важная функция, позволяющая применять пользовательскую функцию к каждому элементу массива.

<?

$name = array ("m"=>"maks", "i"=>"igor", "s"=>"sergey");

function print_array ($item, $key)

{

echo "$key=>$item<br>\n";

}

array_walk ($name, 'print_array');

?>

Функция объявляется при помощи ключевого слова function, после которого в фигурных скобках записываются различные операторы, составляющие тело функции:

function MyFunction()

{

// операторы

}

Если функция принимает аргументы, то они записываются как переменные в объявлении функции. Аргумент функции представляет собой переменную, передаваемую в тело функции для дальнейшего использования в операциях.

function MyFunction($var, $var1, $var2)

Если функция возвращает какое-либо значение, в теле функции обязательно должен присутствовать оператор return:

<?

function get_sum()

{

$var = 5;

$var1 = 10;

$sum = $var + $var1;

return $sum;

}

echo(get_sum()); // выводит 15

?>

Переменные $var и $var1 мы можем объявить как аргументы и в этом случае в теле функции их определять не надо:

<?

function get_sum($var, $var1)

{

$sum = $var + $var1;

echo $sum;

}

get_sum(5,2); // выводит 7

?>