|
|
|
ถามเรื่อง text processing ข้อมูลมาสร้างเป็น associative array ด้วย php |
|
|
|
|
|
|
|
ใน text file 1 บรรทัด มีข้อมูลลักษณะนี้ครับ
"data1,data2,data3,data4"
ไฟล์หนึ่งมีข้อมูลหลายบรรทัด เช่น
20012011,08:00,LabRoom1,ID0001
20012011,08:02,LabRoom2,ID0002
20012011,08:05,LabRoom1,ID0003
21012011,08:30,LabRoom3,ID0001
อ่านข้อมูลมาทีละแถว สร้างเป็น array[ID0001] โดยให้คีย์เป็นลักษณะ associative array (array ที่คีย์เป็นค่า String )ข้างในให้เก็บค่า 3 ตัวไว้คือ 20012011,08:00 และ LabRoom1
แล้วอ่านไฟล์แถวใหม่ สร้าง array[ID0002] เก็บข้อมูลของชุดมันเอง
อ่านข้อมูลใหม่สร้าง array ไปเรื่อยๆถ้าเจอข้อมูลชุดที่ 4 คือ IDxxxx เป็นตัวใหม่ที่ยังไม่มี แต่ถ้าเคยมีแล้วไม่ต้องสร้างใหม่แค่เอาค่าไปทับใน array เดิม ทำจนจบไฟล์
อีกคำถามคือสร้างแล้วหากไป อ่านข้อมูลรอบใหม่มาเจอข้อมูลเดิมในฟิลด์ 4 ที่เคยสร้างไปเป็นคีย์ของ array แล้วจะเช็คอย่างไรว่ามีแล้วไม่ต้องสร้างใหม่
Tag : PHP, CakePHP
|
ประวัติการแก้ไข 2011-01-21 22:43:02 2011-01-21 22:46:42 2011-01-21 22:47:55 2011-01-21 23:43:42
|
|
|
|
|
Date :
2011-01-21 22:28:26 |
By :
trelnup |
View :
1446 |
Reply :
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ลองใช้ฟังก์ชั่นการอ่านไฟล์ fgets ดูนะครับ
Code (PHP)
$handle = fopen("textfile.txt", "r");
$newArr = array();
if ($handle) {
//วนลูปอ่านทีละบรรทัด
while (($buffer = fgets($handle, 4096)) !== false) {
$arr = explode(",", $buffer);//แยกข้อความออกจากกันด้วย ,
$date = $arr[0];
$time = $arr[1];
$room = $arr[2];
$id = $arr[3];
//ถ้าเคยสร้าง $newArr[ID0001] ไปแล้ว ค่าใหม่บรรทัดที่ 4 จะแทนที่ค่าเดิมเอง
$newArr[$id] = array($date=>$date,$time=>$time,$room=>$room);
}
}
//ดูผลลัพธ์
print_r($newArr);
"หากไป อ่านข้อมูลรอบใหม่มาเจอข้อมูลเดิมในฟิลด์ 4 ที่เคยสร้างไปเป็นคีย์ของ array แล้วจะเช็คอย่างไรว่ามีแล้วไม่ต้องสร้างใหม่"
Code (PHP)
if(!array_key_exists($id,$newArr)){//ถ้าไม่เคยสร้าง $newArr[ID0001] ถึงจะเก็บค่าเข้าไปในอาร์เรย์
$newArr[$id] = array($date=>$date,$time=>$time,$room=>$room);
}
|
ประวัติการแก้ไข 2011-01-22 00:47:05
|
|
|
|
Date :
2011-01-22 00:45:49 |
By :
Naizan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
สมมติก่อนจบโปรแกรมผมจะให้มันวนเข้าถึงตัว array ทั้งหมดทุกตัวไปทีละคีย์ เพื่อจะไปเช็คเงื่อนไขบางอย่างเช่น if(out[ค่าคีย์] == "LabRoom1")แล้วถ้าจริงทำงานต่อ พิมพ์ข้อความ echo "True" อะไรลักษณะนี่เขียนยังไงครับ ผมวนค่าที่เป็นคีย์แบบนี้ไม่ถูก
|
|
|
|
|
Date :
2011-01-23 00:04:11 |
By :
trelnup |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (PHP)
$handle = fopen("textfile.txt", "r");
$newArr = array();
if ($handle) {
//วนลูปอ่านทีละบรรทัด
while (($buffer = fgets($handle, 4096)) !== false) {
$arr = explode(",", $buffer);//แยกข้อความออกจากกันด้วย ,
$date = $arr[0];
$time = $arr[1];
$room = $arr[2];
$id = $arr[3];
//ถ้าเคยสร้าง $newArr[ID0001] ไปแล้ว ค่าใหม่บรรทัดที่ 4 จะแทนที่ค่าเดิมเอง
$newArr[$id] = array($date=>$date,$time=>$time,$room=>$room);
//แบบที่ 1
if($room=='LabRoom1'){
echo 'TRUE';
}
}
}
//แบบที่ 2
foreach($newArr as $valArray){
if(in_array("LabRoom1", $valArray)){
echo 'TRUE';
break;//หยุดการทำงาน
}
}
//ดูผลลัพธ์
print_r($newArr);
>>> แบบที่ 1 จะตรวจสอบตอนสร้างอาร์เรย์เลย
>>> แบบที่ 2 จะเอาอาร์เรย์ที่สร้างแล้ว มาวนลูปหาค่าในอาร์เรย์อีกที
|
ประวัติการแก้ไข 2011-01-24 21:30:33 2011-01-24 21:30:59
|
|
|
|
Date :
2011-01-24 09:59:35 |
By :
Naizan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 04
|