ถามเรือ่ง Array นิดนึงครับ จาก Code ด้านบนผมตัวแปลใน Array แยกออกไปเป็นตัวแปล $b แต่พอรันมันรันไม่ได้อ่ะครับ
$b = array ("100" => Chalermchai , "300" => Werachai , "200" => Somchai);
if(krsort($b))
{
foreach ($b as $mon => $name)
{
echo"" .$name." = ".$mon."<br>";
}
}
Date :
22 ธ.ค. 2551 16:22:10
By :
fff
เป็นตัวแปรชุดที่มีการเก็บค่าตัวแปรที่มี ชนิดของข้มูลเหมือนกัน เช่น เก็บ รายชื่อของพนักงาน อายุ เงินเดือน
- Arrary 1 มิติ
$a[0]="Somchai";
$a[1]="Werachai";
$a[2]="Surachai";
$a[3]="Adisorn";
การประกาศตัวแปร
$a[5]
จะมีสมาชิก 6 ตัวคือ $a[0],$a[1],$a[2],$a[3],$a[4],$a[5]
$a[3]
จะมีสมาชิก 4 ตัวคือ $a[0],$a[1],$a[2],$a[3]
Sample
Code (PHP)
<?php
<?
$color_table["red"] = 0xff0000;
$color_table["green"] = 0x00ff00;
$color_table["blue"] = 0x0000ff;
$color_name= "red";
echo "value = ".$color_table[ $color_name]."<BR>\n";
?>
?>
Out
value = 16711680
การใช้คำสั่ง each และ list สำหรับ associative array ถ้าเราต้องการจะเข้าถึงข้อมูลแต่ละคู่ที่ถูกเก็บอยู่ใน associative array เราอาจจะใช้วิธีเรียกผ่านฟังก์ชัน each() และ list() ตามตัวอย่างต่อไปนี้
Sample
Code (PHP)
<?php
<?
unset($a);
$a = array( "a" => 10, "b" => 20, "c" => 30 );
while (list($key,$value) = each($a)) {
echo "$key=$value <BR>\n";
}
?>
?>
Out
a=10
b=20
c=30
ฟังก์ชัน each() จะอ่านข้อมูลทีละคู่จากอาร์เรย์แบบเชื่อมโยงมาแล้วส่งไปยังฟังก์ชัน list() ซึ่งจะทำหน้าที่แยกเก็บ ซึ่งในกรณีก็คือ เก็บไว้ในตัวแปร $key และ $value หลังจากนั้น เราก็สามารถนำค่าของตัวแปร ไปใช้งานตามที่ต้องการได้
- Arrary 2 มิติ
$a[0][0]="Somchai";
$a[0][1]="Werachai";
$a[1][2]="Surachai";
การประกาศตัวแปร
$a[2][2]
จะมีสามชิก 8 ตัว คือ $a[0][0],$a[0][1],$a[0][2],$a[1][0],$a[2][0],$a[1][1],$a[1][2],$a[2][2],
Sample
Code (PHP)
<?php
<?
$countries = array (
"thailand" => array ( "zone" => "Asia", "D_NAME" => ".th"),
"malasia" => array ( "zone" => "Asia", "D_NAME" => ".my"),
"india" => array ( "zone" => "Asia", "D_NAME" => ".in"),
"holland" => array ( "zone" => "Europe", "D_NAME" => ".nl"),
"france" => array ( "zone" => "Europe", "D_NAME" => ".fr")
);
echo "domain name=".$countries[ "thailand"]["D_NAME"]."<BR>\n";
?>
?>
Out Put
domain name=.th
- Array 3 มิติ
$a[0][0][0]="Somchai";
$a[0][1][2]="Werachai";
$a[1][2][3]="Surachai";
Sample1.php
Code (PHP)
<?php
<?
$a[0]="Somchai";
$a[1]="Werachai";
$a[2]="Surachai";
$a[3]="Adisorn";
$b[0]=20;
$b[1]=21;
$b[2]=22;
$b[3]=23;
for($i=0;$i<=3;$i++)
{
echo"name : $a[$i] Old $b[$i] <br>";
}
?>
?>
Sample2.php
Code (PHP)
<?php
<?
$a=array("Somchai","Werachai ","Surachai","Adisorn");
for($i=0;$i<=3;$i++)
{
echo"name : $a[$i] <br>";
}
?>
?>
อาร์เรย์ในภาษา PHP นั้นจะแตกต่างจากอาร์เรย์ในภาษาซีหรือจาวาตรงที่ว่า อาร์เรย์ในภาษา PHP มีขนาดที่เปลี่ยนแปลงได้ หรือจะเรียกว่า dynamic array หรือ vector (สำหรับอาร์เรย์มิติเดียว) เริ่มต้นอาจจะแจ้งใช้ตัวแปรแบบอาร์เรย์ พร้อมเจาะจงขนาดเริ่มแรก เช่น มีขนาดเป็นศูนย์ก็ได้
$myarray[]=3;
$myarray[]=1.1;
$myarray[]="abc";
แต่เมื่อใช้อาร์เรย์ไป ขนาดของมันจะปรับเปลี่ยนได้ คือขยายจำนวนข้อมูลที่เก็บอยู่ภายในอาร์เรย์ ตามจำนวนข้อมูลที่เราใส่เพิ่มเข้าไป จากตัวอย่างข้างบน ในกรณีที่เรามิได้กำหนดเลขดัชนี (index) ก็หมายความว่า จะมีการขยายขนาดของอาร์เรย์เพิ่มขึ้นอีกหนึ่งโดยอัตโนมัติ ทุกครั้งที่เราใส่ข้อมูลที่อยู่ทางขวา และค่าที่เรากำหนดจากทางขวามือ และจะเก็บไว้ในที่ใหม่ของอาร์เรย์ เราไม่ต้องคำนึงถึงเรื่องการจอง หรือ ปลดปล่อยหน่วยความจำของอาร์เรย์ เหมือนอย่างในกรณีของอาร์เรย์ แบบไดนามิกในภาษาซี
นอกจากนั้นข้อมูลแต่ละตัวในอาร์เรย์ไม่จำเป็น ต้องเป็นข้อมูลชนิดเดียวกัน เช่น อาจจะมีทั้งจำนวนเต็ม เลขทศนิยม และข้อความ ปะปนกันไป ตัวอย่างเช่น
Code (PHP)
<?php
<?
$myarray[0] = 1;
echo "number of elements =".count($myarray)."<BR>\n";
$myarray[1] = "abc";
echo "number of elements =".count($myarray)."<BR>\n";
$myarray[2] = 1.3;
echo "number of elements =".count($myarray)."<BR>\n";
$myarray[]= 13+10; // the same as $myarray[3]= 13+10;
echo "number of elements =".count($myarray)."<BR>\n";
for ($i=0; $i < 4; $i++) {
echo $myarray[$i]," \n";
}
?>
?>
ถ้าเราต้องการจะทราบจำนวนของข้อมูลที่มีอยู่ในอาร์เรย์เราจะใช้คำสั่ง count()
เทคนิคหนึ่งที่ใช้ในการสร้างอาร์เรย์ที่เก็บหลายๆข้อความหรือสตริงค์ คือ แทนที่เราจะกำหนดค่าของสมาชิก ในอาร์เรย์ทีละตัว เราจะสร้างได้โดยอัตโนมัติ โดยเก็บสตริงค์เหล่านั้นไว้ในสตริงค์เพียงอันเดียวโดยมีสัญลักษณ์ | เป็นตัวแยก และก็แล้วใช้ฟังก์ชันเป็นตัวแบ่งเพื่อสร้างอาร์เรย์อีกที ตามตัวอย่าง
Code (PHP)
<?php
<?
// create empty array
$a=array();
// define string containing color names separated by | (pipe)
$color_names="red|green|blue";
// create array from string
$a=explode("|",$color_names);
while ($color=each($a)) {
echo "$color[1]<BR>\n"; // note: $color[0] contains the index (0,1,2,...)
}
?>
?>
ลองดูอีกตัวอย่างหนึ่งที่ใช้ฟังก์ชัน explode() สร้างอาร์เรย์โดยอัตโนมัตสำหรับใส่ไว้ใน FORM ในส่วนของ SELECT เป็นเมนูให้เลือก
Code (PHP)
<?php
<?
// create selection list from a given string
function str2select($str, $delim) {
$options = explode($delim,$str);
$num = count($options);
for( $i=0; $i < $num;$i++) {
echo "<option> $options[$i]</option>\n";
}
}
$select_str="10 บาท|20 บาท|30 บาท|40 บาท|50 บาท|100 บาท|200 บาท|500 บาท|1000 บาท";
?>
<FORM>
<SELECT NAME="testform">
<? str2select($select_str,"|"); ?>
</SELECT>
</FORM>
?>
การใช้อาร์เรย์สองมิติ
ถ้าเราต้องการจะใช้อาร์เรย์แบบสองมิติ (หรือมากกว่า) ก็ทำได้เช่นกัน คือชื่อตัวแปรแล้วตามด้วย [..][..] ตัวอย่างเช่น
Code (PHP)
<?php
<?
$dim = 3;
for ($row=0; $row <= $dim; $row++) {
for ($column=0; $column <= $dim; $column++) {
$myarray2[$row][$column] = 4*$row + $column;
echo $myarray2[$row][$column]," ";
}
echo "<BR>\n";
}
?>
?>
สังเกตว่า สำหรับการใช้งานตัวแปรที่เป็นอาร์เรย์ เราไม่จำเป็นต้องแจ้งใช้ตัวแปรที่เป็นอาร์เรย์ พร้อมกำหนดขนาดก่อนการใช้งาน
Date :
2009-04-25 19:36:58
By :
webmaster
Load balance : Server 02