Сообщения с тегами ‘foreach’

Работа с массивами

Собственно что такое массив? Для новичка проще всего представить массив таблицей, в одном столбце которой ключи, а в другом значение. Зная ключ мы можем получить значение. Ну или наоборот, если очень надо) Но давайте не будем спешить. Итак таблица:

Ключ Значение
yellow банан
green яблоко
red Томат

Так, я думаю, понятнее. Этот массив ассоциативный, т.е. ключами являются не цифры, а слова, в данном случае цвета на английском. Так же хочу заметить что настоятельно не рекомендуется ключами массива делать русские символы, т.е. слова содержащие их, ибо в дальнейшем при работе сценария может вылезти какая-нибудь непонятная фигня)
Ну, это запись простая понятная для нас с вами, а как же это записать в php? Есть несколько вариантов:


<?php

$array 
= array(

'yellow'=>'банан',

'green'=>'яблоко',

'red'=>'томат');

//или

$array['yellow'] = 'банан';

$array['green'] = 'яблоко';

$array['red'] = 'томат';

?>

Оба варианта написания являются абсолютно правильными. Но, согласитесь, первый покороче. :)

Итак, что такое массивы мы разобрались, теперь надо понять как же с ними работать. Прежде всего надо помнить что такие команды как echo или print выводят только строки и при попытке посмотреть “в массив” они нам выведут просто слово array. Что ж, значит надо использовать какие-то другие операторы. Для данных целей нам подойдут print_r и var_dump.
Оба оператора выводят список ключей и значений массива, но var_dump дает более полную информацию, такую как тип данных в массиве и, например если это строка, её длину. Попробуйте сделать вот так:


<?php

$array 
= array(

'yellow'=>'банан',

'green'=>'яблоко',

'red'=>'томат');

echo 
'<pre>';

print_r($array);

echo 
'<br/>';

var_dump($array);

echo 
'</pre>';

?>

Данные сведения вам очень помогут при отладке скрипта.

Ну, отладка это конечно хорошо,-скажете вы,-но ведь надо еще сначала и сам сценарий написать.
Полностью с вами согласен, пожалуй “русской кувалдой” для массивов является цикл foreach. О целесообразности его применения на данном этапе говорить не буду, ибо часто при помощи каких либо других операторов можно получить тот же результат гораздо быстрее (быстрее в плане выполнения самого скрипта).

Часто требуется отсортировать массив под свои требования, для этого хорошо помогает функция *sort, точнее это даже не одна, а целое семейство функций:
rsort — Сортирует массив в обратном порядке
sort — Сортирует массив в порядке позрастания элементов
ksort — Сортирует массив по ключам
krsort — Сортирует массив по ключам в обратном порядке
arsort — Сортирует массив в обратном порядке, сохраняя ключи
asort — Сортирует массив, сохраняя ключи
uasort — Сортирует массив, используя пользовательскую функцию для сравнения элементов с сохранением ключей
uksort — Сортирует массив по ключам, используя пользовательскую функцию для сравнения ключей
usort — Сортирует массив по значениям используя пользовательскую функцию для сравнения элементов.

Приведу примеры работы с несколькими из этих функций:


<?php

$array 
= array(

'yellow'=>'банан',

'green'=>'яблоко',

'red'=>'томат');

ksort($array);

print_r($array);

/*

Вернет

Array

(

    [green] => яблоко

    [red] => томат

    [yellow] => банан

)

*/

?>

Массив отсортирован по ключам. Теперь посмотрим вот это


<?

$array 
= array(

'yellow'=>'банан',

'green'=>'яблоко',

'red'=>'томат');

rsort($array);

print_r($array);

/*

Вернет

Array

(

    [0] => томат

    [1] => яблоко

    [2] => банан

)

т.е массив отсортирован в обратном порядке по отношению к тому как он был и ключи массива потеряны.

*/

?>

Как видите здесь все весьма просто. Если вам что то не понятно рекомендую обратиться к оффициальному мануалу, там все это весьма подробно описано, здесь же я лишь кратко привел список того что вам может понадобится.
Кроме того очень часто требуется определить существует ли какой то элемент в массиве. Ну на самом деле не перебирать же из-за этого весь массив. В таких случаях следует использовать функцию in_array:


<?php

$array 
= array(

'yellow'=>'банан',

'green'=>'яблоко',

'red'=>'томат');

if(
in_array('томат',$array))

echo 
'Такой элемент присутствует в массиве!';

?>

Так же в своей практике часто встречалсяс тем что надо проверить существует ли ключ в массиве. Это делается при помощи array_key_exists:


<?php

$array 
= array(

'yellow'=>'банан',

'green'=>'яблоко',

'red'=>'томат');

if(
array_key_exists('red',$array))

echo 
'Такой элемент присутствует в массиве!';

else echo 
'Такого элемента нет';

?>

Так же часто бывает нужно слить два массива в таких случаях надо использовать array_merge


<?php

$array 
= array(

'yellow'=>'банан',

'green'=>'яблоко',

'red'=>'томат');

$array2 = array('new','array');

$array3 array_merge($array,$array2);

print_r($array3);

/*

Вернет 

Array

(

    [yellow] => банан

    [green] => яблоко

    [red] => томат

    [0] => new

    [1] => array

)

*/

?>

Так же нужно бывает подсчитать количество элементов массива, для этого подойдет функция count


<?php

$array 
= array(

'yellow'=>'банан',

'green'=>'яблоко',

'red'=>'томат');

print 
count($array); //вернет 3

?>

Ну вот собственно и все что я хотел описать, данными функциями при работе с массивами я пользуюсь наиболее часто. Как всегда хочу попросить чтобы вы не забывали читать мануал, на время обучение это должно стать для вас библией. Так же буду рад любой критике или вопросам:)

Циклы

Очень часто программисту следует повторить некое действие какое-то количество раз…вот тут-то и возникает вопрос, а как это осуществить. Ответ прост – циклы. Как вы уже поняли цикл это повторение действия несколько раз. Каждый проход по циклу-итерация.

В php существует 3 цикла:
for
foreach
while

Для чего предназначен каждый из циклов? Давайте разберемся.
Цикл for

Давайте рассмотрим такой простой пример:


<?

 
for($i=0;$i<=10;$i++)

 {

 print 
'Точка ';

 }

 
?>

Фактически мы ввели переменную $i и приравняли ее к 0. После чего задали условие что она может меняться, но не может стать больше 10. И задали шаг цикла ($i++) постинкрементом, т.е. при каждом проходе по циклу $i меняется на единицу. 10 раз мы вывели слово “точка”.

Цикл foreach

Рассмотрим достаточно наглядный пример:


<?php

$array 
= array('banana'=>'yellow','apple'=>'green','orange'=>'orange','watermelon'=>'green');

foreach (
$array as $k=>$v)

{

 echo 
'key: ',$k,'<br/>value: ',$v;

}

?>

Здесь мы перебираем массив $array по ключам $k и значениям $v.

И выводим на экран ключи и значения

Цикл while

Данный цикл-цикл повторения какого либо действия. Простой пример


<?php

$i
=0;

while(
$i $i+1)

{

    echo 
$i;

    if(
$i>10) break;

}

?>

Задаем значение переменной $i Посел чего приравниваем данную переменную к ее значению +1. Т.е перед каждым проходом по циклу переменная увеличивается на 1. если Данная переменная становится больше 10 мы выходим из цикла используя оператор break.
Ну вот собственно и все.