--- mảng $ điểm ----
Array
[
[0] => Array
[
[0] => 2011-10-02 05:30:00
[1] => 20
]
[1] => Array
[
[0] => 2011-10-04 09:30:00
[1] => 12
]
[2] => Array
[
[0] => 2011-10-01 13:30:00
[1] => 25
]
[3] => Array
[
[0] => 2011-10-03 02:30:00
[1] => 31
]
]
Tôi có một mảng ở trên và muốn sắp xếp mảng này theo thời gian. Sau đó, tôi đã sử dụng mã như sau để sắp xếp và kết quả là chính xác. Tuy nhiên, nếu tôi thay đổi mã time[$key] = $val[0]
thành $time = $val[0]
, kết quả là sai.
Có ai có thể giải thích điều này với tôi không? Cảm ơn nhiều!
foreach[$points as $key=>$val]{
$time[$key] = $val[0];
array_multisort[$time, SORT_ASC, $points];
}
Hakre
188K49 Huy hiệu vàng419 Huy hiệu bạc807 Huy hiệu đồng49 gold badges419 silver badges807 bronze badges
Đã hỏi ngày 3 tháng 1 năm 2012 lúc 16:09Jan 3, 2012 at 16:09
2
array_multisort
sắp xếp nhiều hơn một mảng cùng một lúc. Tuy nhiên, nó hoạt động trên một mảng các cột, do đó, vòng lặp ____10 là cần thiết để có được một cột thời gian. Sau khi xây dựng danh sách này, sau đó bạn có thể thực hiện Multisort. Mảng
foreach[$points as $key=>$val]{
$time[$key] = $val[0];
array_multisort[$time, SORT_ASC, $points];
}
1 được đặt hàng theo các chỉ số trong foreach[$points as $key=>$val]{
$time[$key] = $val[0];
array_multisort[$time, SORT_ASC, $points];
}
2, theo ví dụ này trong tài liệu.Tuy nhiên, bạn không cần phải thực hiện sắp xếp bên trong
foreach[$points as $key=>$val]{
$time[$key] = $val[0];
array_multisort[$time, SORT_ASC, $points];
}
0, vì điều đó có nghĩa là loại xảy ra 4 lần [trong ví dụ của bạn]. Nó chỉ cần xảy ra một lần:foreach [$points as $key => $val] {
$time[$key] = $val[0];
}
array_multisort[$time, SORT_ASC, $points];
Đã trả lời ngày 3 tháng 1 năm 2012 lúc 16:38Jan 3, 2012 at 16:38
cmbuckleycmbuckleycmbuckley
38.1k8 Huy hiệu vàng77 Huy hiệu bạc90 Huy hiệu Đồng8 gold badges77 silver badges90 bronze badges
Hàm
foreach[$points as $key=>$val]{
$time[$key] = $val[0];
array_multisort[$time, SORT_ASC, $points];
}
4 có chức năng gọi lại so sánh. Bạn có thể sử dụng điều này để so sánh hai dấu thời gian.$arr = array[
array['2011-10-02 05:30:00','20'],
array['2011-10-04 09:30:00','12'],
array['2011-10-01 13:30:00','25'],
array['2011-10-03 02:30:00','31']
];
function timecomp[$a,$b]
{
// Subtracting the UNIX timestamps from each other.
// Returns a negative number if $b is a date before $a,
// otherwise positive.
return strtotime[$b[0]]-strtotime[$a[0]];
}
uasort[$arr,'timecomp'];
print_r[$arr];
Mã trên sẽ trở lại
[
[1] => Array
[
[0] => 2011-10-04 09:30:00
[1] => 12
]
[3] => Array
[
[0] => 2011-10-03 02:30:00
[1] => 31
]
[0] => Array
[
[0] => 2011-10-02 05:30:00
[1] => 20
]
[2] => Array
[
[0] => 2011-10-01 13:30:00
[1] => 25
]
]
cmbuckley
38.1k8 Huy hiệu vàng77 Huy hiệu bạc90 Huy hiệu Đồng8 gold badges77 silver badges90 bronze badges
Hàm
foreach[$points as $key=>$val]{
$time[$key] = $val[0];
array_multisort[$time, SORT_ASC, $points];
}
4 có chức năng gọi lại so sánh. Bạn có thể sử dụng điều này để so sánh hai dấu thời gian.Jan 3, 2012 at 16:23
Mã trên sẽ trở lạikba
cmbuckley5 gold badges61 silver badges87 bronze badges
5
Đã trả lời ngày 3 tháng 1 năm 2012 lúc 16:23
foreach[$points as $key=>$val]{
$time[$val[1]] = $val[0]; // $time will be an array of [ point => time ] pairs
}
asort[ $time ]; // sorts the array and maintains indexes
Kbakba
$points = array_keys[ $time ];
19.2K5 Huy hiệu vàng61 Huy hiệu bạc87 Huy hiệu đồngJan 3, 2012 at 16:13
Những gì bạn muốn làm là [ý tưởng cơ bản]:Rijk
Sau đó, bạn có một mảng các cặp
5, được sắp xếp theo thời gian. Để chỉ nhận được các điểm, ví dụ3 gold badges29 silver badges45 bronze badgesforeach[$points as $key=>$val]{
$time[$key] = $val[0];
array_multisort[$time, SORT_ASC, $points];
}
1