Webmaster общности: Predpriemach.com | SearchEngines.bg

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

    Знам , че има един урок за масивите , но нещо въобще не ми харесва .. та реших да напиша и аз един.Надявам се на много хора ще им е по ясно как се работи с масиви.
    Нека почнем с най-простото – Създаване на масив :

    <?
    $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
    Ако имате въпроси – питайте във форума!

    Оставете коментар