Работа с масиви
Знам , че има един урок за масивите , но нещо въобще не ми харесва .. та реших да напиша и аз един.Надявам се на много хора ще им е по ясно как се работи с масиви.
Нека почнем с най-простото – Създаване на масив :
<?
$priqteli = array("Иван", "Митко", "Невена", "Максим", "Николай", "Петя");
?>$priqteli е масив, който съдържа следните стойности :“Иван“, „Митко“, „Невена“, „Максим“,
„Николай“, „Петя“.
За да достигнем до всеки един от елементите се използва индикатор, като първият елемент започва винаги от 0.
Например за да достигнем до елемента
„Иван“
Използваме така:
$priqteli[0]
Докато за
„Невена“
Ще използваме
$priqteli[2]
PHP позволява също да замените индикаторите със дефинирани от вас „ключове“ , за да създадете леко различен вид на масива.
Всеки ключ е уникален и съответсва на 1 единствена стойност от масива.
<?
$avtori = array("Администратор" => "admin", "Член" => "staf",
"vip" =>
"bafitu");
?>В този случай , $avtori е масив , който съдържа 3 чифта ключ-стойност.Символът => е използван за да покаже асоциацията между ключ и неговата стойност.
За да достигнем до admin
Ще използваме ключа „Администратор“
$avtori[‘Администратор’]
За „bafitu“
ключ „vip“
$avtori[‘vip’]
Масивите в PHP могат да съдържат стингове, числа и дори други масиви.
<?
// масив
$mikser = array( "chisla" => array("edno", 2, 3, "chetiri"), "OS" => array("Linux", "Windows", "MacOS"),
"koli" => array("AUDI" => "black", "Porche" =>
"red",
"Cadilac" => "pink"),
);
//Връща null - няма ключ 2
echo $mikser[2];
// Връща "Array"
echo $mikser["chisla"];
// Връща "edno"
echo $mikser["chisla"][0];
// Връща "MacOS"
echo $mikser["OS"][2];
// Връща "red"
echo $mikser["koli"]["Porche"];
?>Може би сте се досетили , че дефиниране на масив става с функцията array();
<?
$spageti = array("Със сирене", "С гъби", "С шунка", "Всичко");
?>Същият масив може да го направите като определите стойности за всички елементи в масива:
<?
$spageti[0] = "Със сирене";
$spageti[1] = "С гъби";
$spageti[2] = "С шунка";
$spageti[3] = "Всичко";
?>Ако предпочитате можете да изпуснете индикаторите (цифрите), резултата е същия като горния:
<?
$spageti[] = "Със сирене";
$spageti[] = "С гъби";
$spageti[] = "С шунка";
$spageti[] = "Всичко";
?>Можете да използвате и ключове вместо цифрови индикатори :
<?
$filmi = array("action" => "Die Hard", "sci-fi" =>
"Star Wars",
"comedy" => "American Pie");
//еквивалент на горното
$filmi["action"] = "Die Hard";
$filmi["sci-fi"] = "Star Wars";
$filmi["comedy"] = "American Pie";
?>Можете да ползвате функцията range(); за да създадете автоматично масив.
<?
// Връща масив ("30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40")
$cifri = range(30, 40);
// Връща масив ("а", "б", "в", "г", "д", е", "ж")
$bukvi = range("а", "ж");
?>Ако искате да добавите елемент към масив по същия начин например да добавите елемента „С чили“ към масива $spageti изполвате това:
<?
$spageti[4] = "С чили";
?>И масива вече изглежда така:
<?
$spageti = array("Със сирене", "С гъби", "С шунка", "Всичко","С чили");
?>Същото е и ако използвате ключ :
<?
$movies["horror"] = "Room 6";
?>Масива вече е:
<?
$filmi = array("action" => "Die Hard", "sci-fi" =>
"Star Wars",
"comedy" => "American Pie","horror" => "Room 6");
?>Ако искате да промените елемент от масив:
<?
$spageti[3] = "Без нищо";
?>Масива е вече:
<?
$spageti = array("Със сирене", "С гъби", "С шунка", "Без нищо","С чили");
?>Правите същото и със ключовете
<?
$movies["action"] = "Apocalypse Now";
?>Вече е :
<?
$filmi = array("action" => "Apocalypse Now", "sci-fi" =>
"Star Wars",
"comedy" => "American Pie","horror" => "Room 6");
?>Ако искате да разберете дали даденото е масив използвайте функцията is_array();
<?
$spageti = array("Със сирене", "С гъби", "С шунка", "Всичко","С чили");
// Връща "Е масив"
echo is_array($spageti) ? 'Е масив' : 'Не е масив';
$spageti = "спагети без нищо";
// Връща "Не е масив"
echo is_array($spageti) ? 'Е масив' : 'Не е масив';
?>С функцията sizeof() можем да преброим елементите в масива :
<?
$spageti = array("Със сирене", "С гъби", "С шунка", "Всичко","С чили");
// Връща 5
echo sizeof($spageti);
$filmi = array("action" => "Apocalypse Now", "sci-fi" =>
"Star Wars",
"comedy" => "American Pie","horror" => "Room 6");
// Връща 4
echo sizeof($filmi);
?>С функциите array_keys() и array_values() можем да изкараме всички ключове или елементи от масива:
<?
$programi = array("textredaktor" => "Notepad++", "Browser" => "FireFox",
"IRC client" =>
"Mirc", "Music" => "winamp", "messenger" => "Skype");
// връща масив ("textredaktor", "Browser", "IRC client", "Music", "messenger")
array_keys($programi);
// връща масив ("Notepad++", "FireFox", "Mirc", "winamp", "Skype")
array_values($programi);
?>Функцията in_array(); може да ни каже дали дадена стойност съществува в масива:
<?
$programi = array("textredaktor" => "Notepad++", "Browser" => "FireFox",
"IRC client" =>
"Mirc", "Music" => "winamp", "messenger" => "Skype");
// Вярно
echo in_array("winamp", $programi);
// Грашно
echo in_array("Windows Media Player", $programi);
?>Алтернативата на функцията по горе е да претърсим целият масив за резултат и да върне ключа.За целта използваме функцията array_search();
<?
$programi = array("textredaktor" => "Notepad++", "Browser" => "FireFox",
"IRC client" =>
"Mirc", "Music" => "winamp", "messenger" => "Skype");
// Връща "Browser"
echo array_search("FireFox", $programi);
?>Можем да превърнем елементите от масива в променливи с функциите list(); и extract();
<?
$spageti = array("Със сирене", "С гъби", "С шунка", "Всичко","С чили");
list($a, $b, $c, $d, $e) = $spageti;
// връща "С гъби"
echo $b;
?>extract(); превръща ключа в променлива като съдържанието и е стойноста от масива.Все едно имаме $textredaktor = „Notepad++“;
<?
$programi = array("textredaktor" => "Notepad++", "Browser" => "FireFox",
"IRC client" =>
"Mirc", "Music" => "winamp", "messenger" => "Skype");
extract($programi);
// Връща "Notepad++"
echo $textredaktor;
?>Можем да добавим елемент в края на масив с array_push();
<?
$marki = array("Sony", "JVS", "Nokia", "Panasonic");
array_push($marki, "Asus");
// $marki вече изглежда така ("Sony", "JVS", "Nokia", "Panasonic","Asus");
?>Също може и да премахнем елемент от края на масива с array_pop();
<?
$marki = array("Sony", "JVS", "Nokia", "Panasonic","Asus");
array_pop($marki);
// $marki вече изглежда така ("Sony", "JVS", "Nokia", "Panasonic");
?>Ако искаме да премахнем елемент от началото на масива използваме array_shift();
<?
$marki = array("Sony", "JVS", "Nokia", "Panasonic","Asus");
array_shift($marki);
// $marki вече изглежда така ("JVS", "Nokia", "Panasonic","Asus");
?>Докато array_unshift() добавя елемент в началото на масива:
<?
$marki = array("Sony", "JVS", "Nokia", "Panasonic","Asus");
array_unshift($marki, "Neo");
//$marki вече съдържа ("Neo","Sony", "JVS", "Nokia", "Panasonic","Asus")
?>В случай , че искате масив с определена дължина , може да използвате array_pad(); за да създадете масив с празни елементи (в случая) или
с някаква друга стойност:
<?
$uroci = array();
// Връща масив с 4 празни стойности : Array ( [0] => [1] => [2] => [3] => )
$uroci = array_pad($uroci, 4, "");
?>Ако имате масив с вече вкарани стойности можете пак да използвате функцията да запълни масива до определена дължина:
<?
$spageti = array("Със сирене", "С гъби", "С шунка", "Всичко","С чили");
// връща масив с 8 елемента
//("Със сирене", "С гъби", "С шунка", "Всичко","С чили","stupid","stupid","stupid");
$spageti = array_pad($spageti, 8, "stupid");
// Това ще върне същият масив само , че добавените елементи ще са от ляво
// ("stupid","stupid","stupid","Със сирене", "С гъби", "С шунка", "Всичко","С чили");
$spageti = array_pad($spageti, -8, "stupid");
?>Можете да определни елементи от масива с array_slice(); , почти както и с substr() от стринг.
array е масива, start е индекса от който да започне , а length е числото на елемента до който ще върне от start.
Пример:
<?
$cvetove = array("zelen", "cherven", "jult", "sin");
// Връща масив ("cherven", "jult")
array_slice($cvetove, 1, 2);
?>Също може и с отрицателно число
<?
$colours = array("zelen", "cherven", "jult", "sin");
// Връща масив ("cherven", "jult")
array_slice($colours, -3, 2);
?>Функцията currnet(); връща използвания в момента елемент от масива (започва с първият елемент)
<?
$priqteli = array("Иван", "Митко", "Невена", "Максим", "Николай", "Петя");
// Връща "Иван"
echo current($priqteli);
?>Докато key() връща съответстващия ключ:
<?
$priqteli = array("Иван", "Митко", "Невена", "Максим", "Николай", "Петя");
// Връща "Иван"
echo current($priqteli);
// Връща 0
echo key($priqteli);
?>С функциите next() и prev() може да се „разхождаме“ по масива.
<?
$priqteli = array("Иван", "Митко", "Невена", "Максим", "Николай", "Петя");
// Връща "Иван"
echo current($priqteli);
// преместваме напред
next($priqteli);
// Връща "Митко"
echo current($priqteli);
// преместваме напред
next($priqteli);
// Връща "Невена"
echo current($priqteli);
// преместваме назад
prev($priqteli);
// Връща "Митко"
echo current($priqteli);
?>Функциите reset() и end() преместват в началото и в края на масива.
<?
$priqteli = array("Иван", "Митко", "Невена", "Максим", "Николай", "Петя");
// Връща "Иван"
echo current($priqteli);
// преместваме в края
end($priqteli);
// Връща "Петя"
echo current($priqteli);
// връщаме в началото
reset($priqteli);
// Връща "Иван"
echo current($priqteli);
?>Ако искате да пренаредите елементите в масива използвайте array_reverse(); , като обръща всички елементи наобратно.
<?
$browsers = array("FireFox", "MSIE", "Opera");
// Връща ("Opera", "MSIE", "FireFox")
array_reverse($browsers);
?>shuffle(); произполно размества елементите в масива.
<?
$browsers = array("FireFox", "MSIE", "Opera");
// Връща произволно пр. ("MSIE", "FireFox", "Opera")
shuffle($browsers);
?>array_unique(); премахва дублиращите се елементи в масива.
<?
$users = array("Идиот", "Идиот", "Спамер", "Идиот", "Спамер",
"Спамер", "Спамер",
"Идиот");
// Връща ("Идиот", "Спамер")
array_unique($users);
?>sort(); се използва за да сортира масива по азбучен ред или числово.
<?
$music = array("AC/DC", "Metallica", "Slipknot", "Children Of Bodom", "Iron Maiden");
// Връща ("AC/DC", "Children Of Bodom", "Iron Maiden", "Metallica", "Slipknot")
sort($music);
?>rsort() прави същото ,но наобратно.
<?
$music = array("AC/DC", "Metallica", "Slipknot", "Children Of Bodom", "Iron Maiden");
// Връща (Slipknot", "Metallica", "Iron Maiden", "Children Of Bodom", "AC/DC")
rsort($music);
?>ksort() сортира по ключ.krsort() прави същото , но наобратно.
<?
$chisla = array( "-2" => "minus dve","1" => "edno", "10" => "deset", "5" => "pet");
// Връща("-2" => "minus dve", "1" => "edno", "5" => "pet", "10" => "deset")
ksort($chisla);
// Връща("10" => "deset", "5" => "pet", "1" => "edno", "-2" => "minus dve")
krsort($chisla);
?>usort(); позволява да си направите сами сортиращ алгоритъм на елементите от масива.
ето примерна функция която сортира по дължината на елементите:
<?
function proverka($str1, $str2)
{
if (strlen($str1) > strlen($str2)) // ">" пренарежда от елемет с по-малко букви към елемент с повече, "<" е обратно
{
return 1;
}
elseif (strlen($str1) == strlen($str2))
{
return 0;
}
else
{
return -1;
}
}
$webtourist = array("admin", "staf", "mute", "Player_pz", "Our", "S_Soul");
// Връща ("Our", "mute", "staf", "admin", "S_Soul", "Player_pz")
usort($webtourist, "proverka");
?>По същия начин можете да направите и uksort();
natsort() е по „мислеща“ функция за сортиране на елементи в масива.Пример:
<?
$smeseni = array(5,"admin", -15,"staf", "mute", "Player_pz", 15,"Our", "S_Soul");
// Връща ("-15", "Our", "Player_pz", "S_Soul", "admin", "mute", "staf","5", "15")
sort($smeseni);
// Връща ("-15", "5", "15","Our", "Player_pz", "S_Soul", "admin", "mute" ,"staf")
natsort($smeseni);
?>array_flip() ви позволява да размените ключовете и стойностите в масива.
<?
$music = array("electronic" => "Kraftwerk", "rock" => "The Rolling Stones", "alternativе" => "Soundgarden");
// Връща ("Kraftwerk" => "electronic", "The Rolling Stones" => "rock", "Soundgarden" => "alternativе")
array_flip($music);
?>array_merge() комбинира 2 масива в 1.
<?
$otbori = array("Angliq" => "ManUtd", "Ispaniq" => "Valencia", "Italiq" => "Milan");
$drugi = array("Bulgariq" => "Naftex", "Gurciq" => "PAOK");
// Връща комбинирания масив ("Angliq" => "ManUtd","Ispaniq" =>"Valencia", "Italiq" => "Milan", "Bulgariq" =>"Naftex", "Gurciq" => "PAOK")
$obshto = array_merge($otbori, $drugi);
?>array_diff() приема 2 или повече аргумента и връща всички стойности който ги няма от първият масив в останалите.Пример:
<?
$chisla = array(1, 2, 76, 48);
$drugichisla = array(1, 2, 7, 8, 0, 23, 45, 155, 617, 69, 92);
// Връща ("76", "48")
array_diff($chisla, $drugichisla);
?>array_intersect() прави обратното, връща всички стойности който ги има от първият масив в останалите.
<?
$chisla = array(1, 2, 76, 48);
$drugichisla = array(1, 2, 7, 8, 0, 23, 45, 155, 617, 69, 92);
// Връща ("1","2")
array_intersect($chisla, $drugichisla);
?>array_sum() събира всички елементи и пръща общата стойност.
<?
$chisla = array(123124, 2334, 12, 1);
// Връща 125471
echo array_sum($chisla);
?>array_count_values() пресмята колко пъти се повтарят елементите в масива.
<?
$idioti = array("Stupid", "Stupid", "Идиот", "Stupid", "Идиот",
"Идиот", "Идиот",
"Stupid", "Тъп");
// Връща масива ("Stupid" => "4", "Идиот" => "4", "Тъп" => "1")
array_count_values($idioti);
?>array_rand() връща произволно 1 или повече ключове от масив.
<?
$spageti = array("Със сирене", "С гъби", "С шунка", "Всичко","С чили");
// връща примерно (4, 2)
array_rand($spageti, 2);
$music = array("electronic" => "Kraftwerk", "rock" => "The Rolling Stones", "alternativе" => "Soundgarden");
// връща примерно ("rock", "electronic")
array_rand($music, 2);
?>array_walk() позволява използването на дефинирана функция на всеки елемент от масива.
<?
$chisla = array(5, 1324, 3,3.14159265358979323846264338327950288419716939937510, 0.031, 100.1,-98.6);
$preobrazuvani = array();
// функция която закръгля до стотни
function format($num)
{
global $preobrazuvani;
$preobrazuvani[] = sprintf("%1.2f", $num);
}
// format() обхожда всички елементи от масива $chisla
array_walk($chisla, "format");
// $preobrazuvani вече съдържа ("5.00", "1324.00", "3.00", "3.14", "0.03", "100.10","-98.60")
?>Мисля , че това е по важното което трябва да се знае за масивите.Експерементирайте 🙂
Урока е писан специално за http://web-tourist.net
Ако имате въпроси – питайте във форума!


