Monday, January 25, 2010

PHP: Олон хэмжээст массивын хэрэглээ

Өмнөх бичлэг дээр нэг хэмжээс массивийг хэрхэн хэрэглэх талаар нэлээд дэлгэрэнгүй бичсэн. Харин 2 ба түүнээс дээш тооны индэксээр хандах олон хэмжээс массивийн талаар энд дурдъя.

C/C++, Java гэх мэт өргөн тархсан хэн бүхний анхлан сурч хэрэглэж ирсэн програмчллын хэлүүдэд массивий индексээ бүхэл тоогоор авдаг, тэр зарчмаараа хэрэглэхэд асуудал гарахгүй учир тэр талаар яриаг орхилоо. Харин PHP хэлний гол онцлог болох "уян хатан" байдлыг илэрхийлсэн хэдэн жишээ кодыг тайлбарлаад массивтай холбоотой өргөн хэрэглэгдэх стандарт функцуудыг тайлбарлая.

Жишээ нь манай мэргэжлийхэн үздэг хичээлүүдийг суурь хичээл буюу fundamental, мэргэжлийн хичээл буюу professional, гэж ангилаад дотор нь хичээлийн кодоор ялгаад хандах, өөрөөр хэлбэл 2 түлхүүр үг буюу индексээр хандах 2 хэмжээст массивыг үүсгэж үзье.

<?php
        $lessons = array(
                'professional' => array('CS204' => 'Data structures',
                                        'SE310' => 'Wireless programmin',
                                        'CS207' => 'Operating system theory'),
                'fundamental' => array('MT201' => 'Discrete Math',
                                        'EL210' => 'English 2'));
        echo $lessons['professional']['CS207']."<br><br>";
        foreach($lessons as $lkey => $type){
                echo "$lkey lessons:<br>";
                while(list($code, $name) = each($type)){
                        echo "$code $name<br>";
                }
                echo "<br>";
        }
?>
Үр дүн нь:

Operating system theory

professional lessons:
CS204 Data structures
SE310 Wireless programmin
CS207 Operating system theory

fundamental lessons:
MT201 Discrete Math
EL210 English 2

Дээрхи кодыг уншаад, туршиж үзээд жаахан анализ хийгээд энгийнээр тайлбарлавал "PHP хэлний олон хэмжээст массив гэдэг нь элемэнт нь массив байж болох нэг хэмжээс массив юм" гэсэн рекурсив ч гэмээр дүгнэлт гарч ирнэ. Үүний баталгаа болгоод нэг код туршиж үзье.
<?php
        $a = array('Hello World!',
                   array('PHP','Programming', 'Language!'),
                   'Welcome!');
        echo $a[0]."<br>";
        for($i = 0; $i < 3; $i++){
                echo $a[1][$i]." ";
        }
        echo "<br>$a[2]";
?>
Үр дүн нь:

Hello World!
PHP Programming Language!
Welcome!


Олон хэмжээст массивыг ашиглахад хэрэглэгддэг хүчирхэг функцүүдийг нэг нь массивийн индекстэй ижил нэртэй хувьсагчид массивиын элемэнтийн утгыг оноодог extract функц юм. Жишээ код:
<?php
        $pro = array('CS204' => 'Data structures',
                     'SE310' => 'Wireless programmin');
        extract($pro);
        echo "$CS204<br>$SE310";
?>
Үр дүн:

Data structures
Wireless programmin

Өргөн хэрэглэж болох функцууд:

Array_push( array_name, element1, element2.. elements) - өгөгдсөн массивт өгөгдсөн элемэнтүүдийг дарааллаар нь нэмэх функц

Array_pop( array_name) - өгөгдсөн массивийн хамгийн сүүлчийн элемэнтийн утгыг буцааж, устгах үйлдэл.

Array_unshift( array_name,elements) - Массивын эхэнд өгөгдсөн элэмэнтүүдийг нэмэх функц

Array_shift( array) - массивын хамгийн эхний элемэнтийн утгыг буцааж устгах үйлдэл

Array_merge( array1,array2) - өгөгдсөн 2 массивыг нэгтгэн залгах үйлдэл

Array_keys( array) - өгөдсөн массивын индексүүдийг нэг массив болгон массив төрлийн утга буцаах функц

Энэ мэт олон функцууд PHP хэлний маань санд байгаа, PHP маань өөрөө агуу баялаг хэл учир тэр бүгдийг тайлбарлаж бичвэл цаг их орох тул уншигч эрхэм та бие даан тэдгээрийг судалбал зохино.

Sunday, January 24, 2010

PHP: Array буюу массивын талаар

Аливаа програмчлалын хэлэнд Array буюу массив(хүснэгт) гэсэн ойлголт гарч ирдэг. Элемэнтүүдийг массивт хадгалах ба тэдэнд индексээр нь ханддаг. Ихэнх програмчлалын хэлэнд индекс нь зөвхөн 0, 1, 2... гэх мэт бүхэл тоогоор ханддаг бол PHP хэлэнд массивийн индекс нь тоо, string буюу тэмдэгт мөр ч хүртэл байж болдог маш уян хатан, "хайр татсан" эд байгаа юм :)

Хамгийн эхний жишээ:
Бүхэл тоон индексээр анхны утга оноов. Комэнт болгосон хэлбэрээр зарласан нь чанарын ялгаа гарахгүй, гэхдээ та тухайн нөхцөлд нь тохируулж алийг хэрэглэхээ шийднэ биз ээ.

<?php
        $lessons[]='Introduction to Programming';
        $lessons[]='Object Oriented Programming';
        $lessons[]='Computer structure and Assembler';
        $lessons[]='Datastructures and Algorithms';
        /*
        $lessons[0]='Introduction to Programming';
        $lessons[1]='Object Oriented Programming';
        $lessons[2]='Computer structure and Assembler';
        $lessons[3]='Datastructures and Algorithms';
        */
        for($i = 0; $i < 4; $i++){
                echo "$"."lessons[".$i."] = ".$lessons[$i]."<br>";
        }
?>

Мөн массив үүсгэхэд шууд анхны утга оноож бичихээс гадна array() функцийг ашиглаж болдог.
<?php
        $lessons = array('Introduction to Programming',
                        'Object Oriented Programming',
                        'Computer structure and Assembler',
                        'Datastructures and Algorithms');
        for($i = 0; $i < 4; $i++){
                echo "$"."lessons[".$i."] = ".$lessons[$i]."<br>";
        }
?>
foreach loop
<?php
        /*
        $lessons['CS200'] = 'Introduction to Programming';
        $lessons['CS203'] = 'Object Oriented Programming';
        $lessons['CS201'] = 'Computer structure and Assembler';
        $lessons['CS204'] = 'Datastructures and Algorithms';
        */
        $lessons = array('CS200' => 'Introduction to Programming',
                         'CS203' => 'Object Oriented Programming',
                         'CS201' => 'Computer structure and Assembler',
                         'CS204' => 'Datastructures and Algorithms');
                    
        echo "CS201 is ".$lessons['CS201']."<br><br>";

        foreach ($lessons as $code => $value){
                print "$code is $value<br>";
        }
        //Массивийн индекс бүхэл тоогоор өгөгдөөгүй тохиолдолд
        //foreach давталт ашиглаж болно
?>

Өгөгдсөн хувьсагч нь массив мөн эсэхийг шалгахдаа is_array() функцийг ашигладаг. Хэрэв массив бол true үгүй бол false утга буцаана.
<?php
        $lessons = array('Introduction to Programming',
                        'Object Oriented Programming',
                        'Computer structure and Assembler',
                        'Datastructures and Algorithms');
        $credit = 3;
        echo is_array($lessons) ? 'Yes<br>' : 'No<br>';
        echo is_array($credit) ? 'Yes<br>' : 'No<br>';
?>

Массивыг эрэмбэлэх
<?php
        $lessons = array('Introduction to Programming',
                        'Object Oriented Programming',
                        'Computer structure and Assembler',
                        'Datastructures and Algorithms');
        $size = count($lessons);
        echo $size."<br>";
        //массивт хичнээн элемэнт агуулагдаж байгааг
        //count() функцээр олно.
        sort($lessons);
        for($i = 0; $i < 4; $i++){
                print $lessons[$i]."<br>";
        }
?>
Массивыг эрэмбэлэхэд sort() функцийг ашиглана. Массив ямар төрлийн болохоос шалтгаалан
sort_flag
sort_regular
sort_numeric
sort_string
sort_locale_string функцуудыг ашиглах боломжтой.