ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: [php]sort  (อ่าน 1299 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
GillBate
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 160
ออฟไลน์ ออฟไลน์

กระทู้: 1,236



ดูรายละเอียด
« เมื่อ: 28 พฤษภาคม 2010, 17:36:10 »

 Tongue คิดมาสองวันแล้วครับ ปวดหัวจริงๆ คิดไม่ออก จะเอาข้อมูลออกมาจาก sort อ่ะครับ

โค๊ด:
        $array[1]['name'] = $member[1]['name'];
$array[1]['battle'] = $member[1]['battle'];
$array[2]['name'] = $member[2]['name'];
$array[2]['battle'] = $member[2]['battle'];
$array[3]['name'] = $member[3]['name'];
$array[3]['battle'] = $member[3]['battle'];
$array[4]['name'] = $e[1]['name'];
$array[4]['battle'] = $e[1]['battle'];
$array[5]['name'] = $e[2]['name'];
$array[5]['battle'] = $e[2]['battle'];
$array[6]['name'] = $e[3]['name'];
$array[6]['battle'] = $e[3]['battle'];

เรื่องของเรื่องคือผมต้องการเรียงว่าใครมีค่า battle มากกว่ากัน เรียงออกมาแล้วจะเอาชื่อคนนั้นออกมาใช้งานอ่ะครับ
งงเรื่อง array อย่างแรง ช่วยหน่อยครับ
บันทึกการเข้า
Bone
สมุนแก๊งเสียว
*

พลังน้ำใจ: 20
ออฟไลน์ ออฟไลน์

กระทู้: 809



ดูรายละเอียด เว็บไซต์
« ตอบ #1 เมื่อ: 28 พฤษภาคม 2010, 17:45:22 »

ทำไม ไม่้ใช้ array[name][battle] = 1254(ค่า) แหละครับ
บันทึกการเข้า

เฟอร์นิเจอร์ http://www.kssfurniture.com
เฟอร์นิเจอร์สำนักงาน http://www.officetou.com
เดือนภัยระวังโดนหลอก http://vichitrochwo.blogspot.com/
woratana
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 178
ออฟไลน์ ออฟไลน์

กระทู้: 2,283



ดูรายละเอียด เว็บไซต์
« ตอบ #2 เมื่อ: 28 พฤษภาคม 2010, 17:50:23 »

แบบง่าย ๆ นะครับ

ใช้ Algorithm Bubble Sort แบบที่สอนกันในวิชา Computer Programming ของมหาลัยอะครับ  Tongue
ลองดูฮะ  wanwan017
บันทึกการเข้า

GillBate
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 160
ออฟไลน์ ออฟไลน์

กระทู้: 1,236



ดูรายละเอียด
« ตอบ #3 เมื่อ: 28 พฤษภาคม 2010, 19:45:51 »

แบบง่าย ๆ นะครับ

ใช้ Algorithm Bubble Sort แบบที่สอนกันในวิชา Computer Programming ของมหาลัยอะครับ  Tongue
ลองดูฮะ  wanwan017
Tongue มันไม่ง่ายตรงที่ไม่เคยเรียนนี่แหละครับ
บันทึกการเข้า
ohmohm
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 170
ออฟไลน์ ออฟไลน์

กระทู้: 3,098



ดูรายละเอียด เว็บไซต์
« ตอบ #4 เมื่อ: 30 พฤษภาคม 2010, 17:19:13 »

ใช้ usort()
ตัวอย่าง ( ไม่รู้ต้องการแบบนี้หรือเปล่า )
โค๊ด:
<?php
$member[1][&#39;name&#39;] = &#39;usr001&#39;;
$member[1][&#39;battle&#39;] = 100 ;
$member[2][&#39;name&#39;] = &#39;usr002&#39;;
$member[2][&#39;battle&#39;] = 300 ;
$member[3][&#39;name&#39;] = &#39;usr003&#39;;
$member[3][&#39;battle&#39;] = 200 ;
$member[4][&#39;name&#39;] = &#39;usr004&#39;;
$member[4][&#39;battle&#39;] = 100 ;

echo &#39;<pre>&#39;;
print_r $member );
echo &#39;</pre>&#39;;

function mycmp($a$b)
{
return $a[&#39;battle&#39;] - $b[&#39;battle&#39;] ;
}

usort$member, &#39;mycmp&#39; );

echo &#39;<hr /><pre>&#39;;
print_r $member );
echo &#39;</pre>&#39;;

?>

รายละเอียด php sorts แบบต่างๆ http://www.php.net/manual/en/array.sorting.php

ิีิbubble sort ก็คือสอง loops ลูปแรกพยายามหาสมาชิกที่มีค่ามากสุุด มาไว้ท้าย จึงทำลูปซ้อนเพื่อสลับตำแหน่งไปเรื่อยๆ เพื่อเอาตัวมากสุดไปขวา ลูปต่อมาก็หาค่ามากสุดรองลงมา มาไว้ตำแหน่งรองลงมาเช่นกัน
แต่ใช้ quick sort หรือ merge sort ดีกว่า หาหนังสือ หรืออ่านเว็บ Com Sci หน่อยก็ดีนะครับ สำหรับโครงการอันยิ่งใหญ่
บันทึกการเข้า
woratana
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 178
ออฟไลน์ ออฟไลน์

กระทู้: 2,283



ดูรายละเอียด เว็บไซต์
« ตอบ #5 เมื่อ: 30 พฤษภาคม 2010, 18:17:02 »

เยี่ยมเลยครับท่าน ohmohm

สำหรับคุณ GillBate ยังไงก็ลองศึกษาพวกนี้ไว้นะครับ ระบบต่อสู้ถ้าจำให้ sort แบบเทพ ๆ ก็ต้องลองดูพวกนี้แหละครับ  wanwan017
บันทึกการเข้า

GillBate
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 160
ออฟไลน์ ออฟไลน์

กระทู้: 1,236



ดูรายละเอียด
« ตอบ #6 เมื่อ: 30 พฤษภาคม 2010, 18:32:38 »

 Tongue ขอบคุณทุกท่านครับ ลืมบอกไปว่าทำได้แล้ว
โค๊ด:
//arrannge battle!
$data[] = array('battle' => $member[1]['battle'], 'name' => $member[1]['name']);
$data[] = array('battle' => $member[2]['battle'], 'name' => $member[2]['name']);
$data[] = array('battle' => $member[3]['battle'], 'name' => $member[3]['name']);
$data[] = array('battle' => $e[1]['battle'], 'name' => $e[1]['name']);
$data[] = array('battle' => $e[2]['battle'], 'name' => $e[2]['name']);
$data[] = array('battle' => $e[3]['battle'], 'name' => $e[3]['name']);

//usage (only enter the keys you want sorted):


// Obtain a list of columns
foreach ($data as $key => $row) {
$battle[$key]  = $row['battle'];
$name[$key] = $row['name'];
}

// Sort the data with volume descending, edition ascending
// Add $data as the last parameter, to sort by the common key
$sorted = array_multisort($battle, SORT_DESC, $name, SORT_ASC, $data);
บันทึกการเข้า
หน้า: [1]   ขึ้นบน
พิมพ์