$massnew[] Как и $v) one очевидна, следует
Сайт о фамилии ШЛЕГ (SHLEG), ШЛЁГ (SHLEG, SHLYOG?SHLJOG?SHLIOG), ШЕЛЕГ (SHELEG)
На главную страницу

Мотиватор:
+17
-8
Сайт в разработке.

ШЛЕГ (SHLEG), ШЛЁГ (SHLEG, SHLYOG ? SHLJOG ? SHLIOG), ШЕЛЕГ (SHELEG)


Сайт о фамилии ШЛЕГ (SHLEG), ШЛЁГ (SHLEG, SHLYOG ? SHLJOG ? SHLIOG), ШЕЛЕГ (SHELEG). По всем вопросам пишите мне на shlegav@rambler.ru


Реклама:

Оформление свадьбы в фисташковом цвете

Массивы в PHP

Что такое массивы и как их можно использовать.

Примеры создания массива:
Создать массив:

$имя_массива[позиция] = данные;
$massiv[0] = "text";

$massiv[0] имеет значение "text"; Но можно записать попроще:

$massiv[] = "text";

это запись эквилента предыдущей. т.е. первый массив начинается не с единицы, а с нуля! Но также можно сделать так:

$massiv[2] = "text";

$massiv[0] и $massiv[1] будут пусты.

Если вы хотите создать массив уже из имеющихся данных, то делают вот что:

$massiv = array("text", "mes", "chislo");
$massiv[0] будет равен "mes" "text" "chislo";

Массивы и файлы
Массивы можно записывать в файлы и также вытаскивать их оттуда. Причём можно вытащить массив и что-нибудь добавить новое или изменять. Удалить тоже можно.

Допустим мы создали массив:

$massiv[] = array("Text");

Далее записываем его в файл

$file = fopen('file.txt', 'w');
$massiv = serialize($massiv); // это мы перекодировали массив для записи его в файл
fwrite ($file,"$massiv");
fclose($file);

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

$open = fopen("file.txt", "r");
$massiv = unserialize(fread($open,100000));
fclose($open);
$massnew[] = array("text323123"); // информация которую надо добавить в наш старый массив
$massiv[] = $massnew; // добавляем
$open2 = fopen("file.txt", "w");
fputs($open2, serialize($massiv));
fclose($open2);

Вывод массива
Вот простй способ вывода массива:

print_r($massiv);

Также можно вывести массив перебором его элементов:

foreach($massiv as $mas) {
         echo "$mas[name]
$mas[link]
$mas[description]

";
}


Массивы бывают обыкновенные и ассоциативные. Отличаются они только тем, что в обыкновенных массивах ключами служат целые числа, а в ассоциативных -- сочетания различных знаков.

$personal[1]; // обращение к ячейке обыкновенного массива;
$personal['vova']; // обращение к ячейке ассоциативного массива;

При обращении к ячейке ассоциативного массива, не обязательно ключ ячейки брать в кавычки или скобки. Но рекомендуется это делать. Массивы в PHP могут иметь любую вложенность измерение, но традиционно используются массивы одно- и двухмерные. Массив может хранить любую информацию -- от простых чисел до сложных структур. Объявить массив просто:

var $array1 = array(); // пустой массив
var $array2 = array("vova", "nina", "olga"); // массив с данными

Так объявляют обыкновенный массив. Если же нам надо объявить ассоциативный массив с данными или массив, в котором данные "разбросаны" в далекие друг от друга ячейки, нужно указывать кроме значений ячеек, еще и их ключ (название). Ключ от данных отделяется сочетанием "=>".

var $array3 = array(0 => "vova", 11 => "nina", 543 => "olga");
var $array4 = array("sorokin" => "vova", "bulgakova" => "nina", "zhezlova" => "olga");

В первом случае мы видим массив имен, присвоенных ячейкам с конкретными номерами (все промежуточные ячейки заявлены пустыми), а во втором -- ячейки с именами имеют вместо нумерации -- фамилии.  Чтобы узнать имя Сорокина, нам теперь достаточно спросить массив:

echo $array4['sorokin'];

В общем, это все, что важно знать об объявлении массивов. Теперь поговорим о том, что мы можем с массивами делать. Разумеется, я не буду останавливаться на том, что в массивах можно хранить данные: читать их, удалять и заменять на новые.

Как проверить существование массива?
Надо заметить, что массив, в стандартных ситуациях, ведет себя так же, как обыкновенная переменная.

if(!isset($array_name)) echo "Нет такого массива!";

Как уничтожить массив?

unset($array_name); // весь массив
unset($array_name[n]); // одну из его ячеек:

Как проще всего распечатать содержимое массива?

echo implode(',',$array_name);

где implode -- функция объединения с разделителем. В данном случае, массив выступает в роли списка переменных.

Если нужно создать массив для одной операции?
Тогда можно воспользоваться функций list(), объединяющей перечисленные в ней переменные в единый массив.

$str="один,два,три";
$list($one, $two,$three)=explode(',',$srt);

Теперь каждая переменная содержит свое слово. И распечатать:

echo implode(',',list($one, $two, $three));

Можно, конечно, и просто перебрать содержимое массива в цикле while, for или foreach

Как изменить размеры массива?
Вам не надо заботиться о выделении памяти для новых ячеек массива. PHP сам выделит их столько, сколько потребуется. Но если вы задумали обрезать массив или вырезать из массива определенный кусок, можете воспользоваться функцией array_splice().

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

function print_arr($str){
    echo $str,"\n";
    $str.=" - done";
}
$arr=array("one","two","three");
array_walk($arr,'print_arr');

распечатает на экране все элементы массива $arr; Если же вам необходимо произвести преобразование содержимого ячеек и получившиеся данные записать обратно в ячейки, вам придется указать это явно -- дать ссылку на реальный экземпляр ячейки в памяти. Как и в языке C, в PHP это делается добавлением перед переменной амперсанта "&". Скажем, если бы на надо было не просто распечатать содержимое ячеек, как в приведенном примере, а добавить слово "done" после каждого слова и снова распечатать содержимое массива, то пример выглядел бы так:

function print_arr(&$str){
    echo $str,"\n";
    $str.=" - done";
}
$arr=array("one","two","three");
array_walk($arr,'print_arr');
echo "\n";
array_walk($arr,'print_arr');

а результат так:

one two three one - done two - done three - done

Вот такая полезная функция, которой редко пользуются.

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

Как сравнить два массива?
И тут PHP нас заставляет поскучать, ибо функция array_dif все сделает за нас. Передайте этой функции два массива и она возвратит вам все элементы первого массива, не найденные во втором. Кстати, вторым массивом можно не ограничиваться, функция принимает для сравнения любое количество массивов через запятую.

$result = array_diff ($array1, $array2,$array3,:);

Как объединить массивы?
В PHP массивы объединяет функция array_merge, правда, никто вам не запретит пройтись циклом по одному массиву, прочесть его по ячейкам и дописать данные в конец другого массива. Честно говоря, одномерные массивы в PHP можно "складывать" обычным плюсом:

$array3=$array1+$array2;

Но! Надо помнить, что сложение массивов игнорирует дубликаты. Если в первом массиве уже есть подобная запись, то она не копируется из второго. При необходимости объединения всех элементов массива, включая повторяющиеся, можно воспользоваться функцией array_merge_recursive.

Как выстроить ячейки массива в обратном порядке (обернуть масссив)?
Если массив не очень большой, логично воспользоваться функцией array_reverse.

$arr=array_reverse($arr);

Но эта функция не слишком быстра на больших массивах. Для сортировки большого массива больше подходит вариант с циклом for:

for($i=count($arr)-1; $i>=0; $i—) {
    $arr2[$j++]=$arr[$i];
}
$arr=$arr2; unset($arr2);

т.е. обходим массив $arr от конца к началу и записываем данные в новый массив, начиная с нулевой ячейки. Этот вариант работает быстрее, но кушает память во время выполнения, об этом тоже не стоит забывать.

Как получить сразу несколько элементов массива?
Предположим, что вам надо получить три элемента массива в разные переменные. Можно воспользоваться традиционным присваиванием:

$first_name=$person[1];
$last_name=$person[2];
$fax=$person[14];

а можно воспользоваться функцией array_slice совместно с хорошо известной нам функцией list.

list($first_name,$last_name,$fax)=array_slice($person,1,2,14);

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

$basket=array_slice($shop,4,6,12,18,22);

Как найти элементы, удовлетворяющие определенному условию?
Тут, друзья мои, лучше всего подходят традиционные методы работы с массивами — циклы. Для обхода массива по ячейкам можно использовать любые циклы, но традиционно, используется цикл for для обыкновенных массивов и foreach для ассоциативных. С первым циклом вы уже знакомы, а циклом foreach можно воспользоваться, например, так:

foreach($arr as $k => $v) {
    echo "arr['$k']=$v \n";
}

Этот цикл нарисует вам все содержимое ассоциативного массива в столбик. Кстати, этот метод вполне приемлем и для числовой индексации массивов, но он работает медленнее, чем цикл for, поэтому, использовать его следует по прямому назначению.

Как отсортировать массив?
Для сортировки массива в PHP существуют различные функции.

sort() — сортирует массив самым, что ни на есть, традиционным способом. В качестве дополнительного параметра сортировки можно указать: сортировку обыкновенную, сортировку числовую и сортировку строковую.

asort() — используется для сортировки ассоциативных массивов.

arsort() и rsort() — сортируют массив в обратно порядке, с той лишь разницей, что arsort сортирует массивы ассоциативные, а asort сортирует массивы с числовой индексацией.

ksort() и krsort() — сортируют ассоциативные массивы по ключам, что бывает очень важно. Первая функция сортирует в прямом, а вторая — в обратном порядке.

natsort() — не менее полезная сортировка, осуществляющая упорядочивание элементов массива в "натуральном", жизненно-очевидном порядке. Покажу на примере из учебника PHP — сразу станет все понятно:

Standard sorting
Array (
[0] => img1.png
[1] => img10.png
[2] => img12.png
[3] => img2.png
)

Natural order sorting
Array (
[3] => img1.png
[2] => img2.png
[1] => img10.png
[0] => img12.png
)

natcasesort() — делает то же самое, но не обращая внимания на регистр букв.

usort() и uksort() — функции сортировки по правилам, определяемым пользователем. Я не буду подробно останавливаться на этом виде сортировки. Так как используют ее крайне редко. Если доведется, посмотрим эту функцию на "живом" примере. Разобравшись со стандартными массивами, перейдем к ознакомлению с особенностями массивов ассоциативных. Как вы уже знаете, ассоциативный массив отличается от массива с числовой индексацией только тем, что в качестве индекса используются цепочки символов и букв. В любом их сочетании. И первый вывод, который сам напрашивается -- любая операция, проводимая над ассоциативным массивом, может быть с таким же успехом проведена над массивом с числовой индексацией. Но не всегда работает обратно правило, поэтому пройдемся по функциям, полезным для работы с ассоциативными массивами. Если в обыкновенных массивах мы чаще всего работаем с данными, используя ключи индексации только в качестве идентификатора ячейки, то в ассоциативных массивах имена ячеек и их содержимое достаточно часто используются наравне -- как хранилище данных. Для простоты даже можно представить себе, что ассоциативный массив -- это обыкновенный двумерный массив, где в одном измерении содержится ключ ассоциативного массива, а в другом -- данные.

Как проверить существование ключа в ассоциативном массиве?
Так же, как и любую переменную.

if(isset($arr['test']) echo "Ячейка с именем 'test' -- существует";

Но эта функция только сообщит нам: выделено ли место в памяти под ячейку с таким именем или нет. И ответ будет положительным даже если ячейка будет содержать 0 или NULL. Если же вы хостите знать, не пуста ли ячейка, воспользуйтесь функцией empty().

Как удалить ячейку в ассоциативном массиве?
Если вы желаете обнулить ячейку, можете присвоить ей ноль или пустую строку:

$arr['test']='';
$arr['test']=0;

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

unset(arr['test']);

Как выяснить, содержится ли в массиве какое-то конкретное значение?
Для того, чтобы получить ответ на этот вопрос, разработчики PHP включили стандартную функцию in_array:

if(in_array('искомое значение',$arr)) :;

Функция in_array попросту производит поиск в массиве и возвращает TRUE, если значение найдено или FALSE в противном случае. Однако, есть интересная и важная тонкость в таком поиске. Система автоматического приведения типов в PHP может сыграть с вами злую шутку. Что, если вы ищите число 12345 в массиве, где есть строка "012345"? PHP решит, что это значение вам вполне подходит, так как можно спокойно отбросить незначащий ноль в числе 012345. Чтобы подобного избежать, в четвертой версии PHP в функцию in_array добавлен третий параметр, определяющий: стоит ли производить поиск с учетом разных типов или нет.

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

$man=$arr['director']; // выясняется, что это Иванов

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

Как можно обернуть ассоциативный массив?
Чтобы поменять ключи и значения местами, можно воспользоваться функцией PHP array_flip. Думаю, тут и пояснять нечего.

Как сортировать ассоциативные массивы?
Как и для обыкновенных массивов, для сортировки ассоциативных существуют всевозможные сортировки: asort(), arsort(), ksort(), krsort(), uasort() и uksort(), сортирующие соответственно: прямо, в обратном порядке, прямо по ключам, обратно по ключам, прямо по пользовательской функции и обратно по пользовательской функции.

Как соединить два ассоциативных массива?
Можно:
1. Воспользоваться функцией array_merge.
2. Сложить массивы обычным плюсом.

Однако, надо соблюдать осторожность. Если при слиянии, в массивах окажутся ячейки с одинаковым индексом, ячейка будет перезаписана данными того массива, который указан последним в списке аргументов к array_merge. В принципе, можно этого избежать, если воспользоваться функцией array_merge_recursive(), которая объединяет значения одинаковых ячеек. Производит их "слияние".

С использованием книги Хьюгса Стерлинга "PHP 4.0. Руководство разработчика".



Промышленный дизайн - MainCrafT.org
Rambler's Top100 Rambler's Top100



объединения созданную array splice(). функцией массива. ячейки,