09/10/2018, 23:33

Sort and display mảng nào

Conan có khai báo một cái mảng gồm các phần tử mảng.
PHP Code:
/*
* $data = array($parentId, $childId, $textData);
* $arr = ($data);
*/

$data1     = array(12"This is comment 1");
    
$data2     = array(13"This is comment 2");
    
$data3     = array(24"This is comment 3");
    
$data4     = array(45"This is comment 4");
    
$data5     = array(56"This is comment 5");
    
$data6     = array(17"This is comment 6");
    
$data7     = array(18"This is comment 7");
$arr = array($data1$data2$data3$data4$data5$data6$data7); 
Đanh viết một cái hàm để sort cái mảng $arr ở dưới.

Sort ở đây là duyệt trên các phần tử của $arr và display theo thứ tự.
ví dụ sort(1) nó sẽ tìm các trong $arr nếu gặp phần tử con có parentId bằng 1 nó sẽ kiểm tra phần tử này có phần tử con không [nghĩa là childId của phần tử này là parentId của phần tử khác] và display ra và tiếp tục tìm cho hết, sau đó quay trở lại tiếp tục tìm phần tử có childId bằng parentId =1.
Quá trình trên lập lại cho đến khi display hết các phần tử trong $arr theo thứ tự như trên.
Conan làm hoài mà không đc, mọi người có solution không giúp Conan với.

Thanks
sacroyant viết 01:39 ngày 10/10/2018
Nếu sort(1) trả về :

This is comment 1
This is comment 2
This is comment 6
This is comment 7
Thì có đúng ý bác không nhỉ ?
conan1212 viết 01:37 ngày 10/10/2018
Quote Được gửi bởi sacroyant View Post
Nếu sort(1) trả về :


Thì có đúng ý bác không nhỉ ?
Không bác à, nó duyệt đến phần tử con, tiếp đến là con của phần tử con, rồi mới tiếp tục trở lại duyệt phần tử con ban đầu.

PHP Code:
data1     = array(12"This is comment 1");
    
$data2     = array(13"This is comment 2");
    
$data3     = array(24"This is comment 3");
    
$data4     = array(45"This is comment 4");
    
$data5     = array(56"This is comment 5");
    
$data6     = array(17"This is comment 6");
    
$data7     = array(18"This is comment 7"); 
ví dụ như nếu sort theo parentId =1 thì nó sẽ display thế này.

This is comment 1
This is comment 3
This is comment 4
This is comment 5

This is comment 2

This is comment 6

This is comment 7
Hero_vanchien viết 01:37 ngày 10/10/2018
Sao bác không viết cái cấu trúc Array của bác cho mọi người dễ hiểu:
Nó thế này phải không
-------------------------------------
| ID | parentId | value |
-------------------------------------
| 1 | 2 | This is comment 1 |
| 1 | 3 | This is comment 2 |
| 2 | 4 | This is comment 3 |
| 4 | 5 | This is comment 4 |
| 5 | 6 | This is comment 5 |
| 1 | 7 | This is comment 6 |
| 1 | 8 | This is comment 7 |
-------------------------------------

Đấy là em viết thế. Em thấy chẳng liên quan gì đến cái chữ Sort cả!!!?
Bác có thể dùng vòng while để lấy ra....
conan1212 viết 01:46 ngày 10/10/2018
Mình đã giải quyết đc vấn đề rồi, cám ơn các bạn đã quan tâm giúp đỡ.
Mình cũng đã có một giải thuật hay rút ra từ cái này cho mấy cái vấn đề về category lồng nhau [đa cấp] hoạt động rất tốt, nếu ai muốn xem cái hàm của mình thì liên hệ nick mình share cho.
sacroyant viết 01:48 ngày 10/10/2018
Share cho tôi với. Tôi bó tay với cái này rồi đấy !
sacroyant viết 01:33 ngày 10/10/2018
Bác xử lý được cái này thì chắc giúp tôi được vài chỉ dẫn.

Để lưu danh sách các RSS của 1 người sử dụng, tôi đang sử dụng 1 bảng tblFeeds gồm 5 cột : ID, Title, Link, CollectionID, UserID. và 1 bảng tblCollection gồm 3 cột : ID, Name, UserID.

Nay tôi có ý tưởng kết hợp chúng lại thành 1 bảng chỉ gồm 2 cột UserID và CollectionFeeds. Các giá trị CollectionFeeds sẽ được lưu dạng :

ID | CollectionName | FeedsTitle | FeedsLink ||
ID | CollectionName | FeedsTitle | FeedsLink ||

Sau đó, khi cần lấy xuống trình bày dạng bảng :



thì dùng AJJAX lôi cả chuỗi xuống cho JavaScript phân tích. JavaScript sẽ dựa vào các ký tự "||" để đánh dấu 1 hàng, các ký tự "|" để tách từng fields và trình bày ra bảng.


Vấn đề không phức tạp nếu chỉ có thêm vào và xóa đi. Nhưng còn khi đổi tên 1 Feeds hoặc 1 Collection thì khá nan giải. Bác có ý kiến nào hay hay giúp tôi không ?
conmalele viết 01:35 ngày 10/10/2018
Chắc là đang muốn làm cái comment xếp theo từng cấp tương ứng với bài trả lời cho những comment
conan1212 viết 01:39 ngày 10/10/2018
Quote Được gửi bởi sacroyant View Post
Bác xử lý được cái này thì chắc giúp tôi được vài chỉ dẫn.

Để lưu danh sách các RSS của 1 người sử dụng, tôi đang sử dụng 1 bảng tblFeeds gồm 5 cột : ID, Title, Link, CollectionID, UserID. và 1 bảng tblCollection gồm 3 cột : ID, Name, UserID.

Nay tôi có ý tưởng kết hợp chúng lại thành 1 bảng chỉ gồm 2 cột UserID và CollectionFeeds. Các giá trị CollectionFeeds sẽ được lưu dạng :

ID | CollectionName | FeedsTitle | FeedsLink ||
ID | CollectionName | FeedsTitle | FeedsLink ||

Sau đó, khi cần lấy xuống trình bày dạng bảng :



thì dùng AJJAX lôi cả chuỗi xuống cho JavaScript phân tích. JavaScript sẽ dựa vào các ký tự "||" để đánh dấu 1 hàng, các ký tự "|" để tách từng fields và trình bày ra bảng.


Vấn đề không phức tạp nếu chỉ có thêm vào và xóa đi. Nhưng còn khi đổi tên 1 Feeds hoặc 1 Collection thì khá nan giải. Bác có ý kiến nào hay hay giúp tôi không ?
Mặc dù không tán đồng cách thiết kế CSDL của bác, nhưng solution cho vấn đề của bác có lẽ là nên đánh dầu trước khi lôi nó xuống bằng Ajax.
ví dụ như khi del, hay chỉnh sửa thì bác nên đánh dấu phần tử trong collection đó trước khi chỉnh nó, và sau khi đã chỉnh sửa xong thì gởi dữ liệu trở lại và căn cứ vào vị trí đã đánh dấu của phần tử đó trong collection mà thay đổi.

Quote Được gửi bởi conmalele View Post
Chắc là đang muốn làm cái comment xếp theo từng cấp tương ứng với bài trả lời cho những comment
đúng thế bác commale ạ làm xong cái này Conan đc thêm một số kinh nghiệm về xây dựng hàm có sử dụng kĩ thuật đệ quy .
sacroyant viết 01:49 ngày 10/10/2018
Chưa hiểu ý bác lắm. Bác không tán đồng ở điểm nào. Xin cho biết ý kiến để tôi còn tham khảo chứ

Mời bác xem bản demo này :

http://snfeed.h4vn.info/Examples/Bookmark/bmk.htm

Chỉ là 1 chuỗi được xử lý hoàn toàn bằng Java Script, nên cho cảm giác phản ứng của nó là tức thì. Trang này tôi không cập nhật dữ liệu, xem như mô hình minh họa ý tưởng thôi. 1 bản thu gọn khác hoàn chỉnh hơn tôi đã nhúng vào cái Feeds Reader, có cấu trúc dữ liệu như mô tả : 1 field duy nhất cho mỗi user



Từ cái này mà tôi nảy ra ý cấu trúc lại cơ sở dữ liệu cho các bảng Feeds theo kiểu đó xem có được ko. Tuy vậy, xin các bác chỉ điểm thêm mấy hàm xử lý array trong PHP : thêm, xóa, sắp xếp mảng nhiều chiều. Đa tạ.
Bài liên quan
0