2010-01-04 115 views
0

我有一個多維數組是這樣的:PHP在array_multisort不正確排序,同時使用複雜的陣列

Array 
(
    [thursday] => Array 
     (
      [0] => Array 
       (
        [title] => Movie2 
        [time] => 15.30 
        [venue] => VenueA 
       ) 

      [1] => Array 
       (
        [title] => Movie1 
        [time] => 13.00 
        [venue] => VenueB 
       ) 
     ) 
) 

我想通過一次使用排序array_multisort它,這是怎麼回事很好,當我使用它像這樣:

foreach ($movies['thursday'] as $key => $row) { 
     $time[$key] = $row['time']; 
} 
array_multisort($time, SORT_ASC, $movies['thursday']); 
unset($time); 

但是用這種方法,我必須在每週的每一天重複這段代碼。所以我想使用:

foreach ($movies as $movie) { 
foreach ($movie as $key => $row) { 
    $time[$key] = $row['time']; 
} 
array_multisort($time, SORT_ASC, $movie); 
unset($time); 
} 

但現在陣列仍然未排序。據我所見,後一段代碼功能等同於前一段代碼。還是我犯了一個巨大的概念錯誤?

回答

1

找到了答案,用while的伎倆。

while($elements = each($movies)) { 
foreach($movies[$elements['key']] as $key => $row) { 
    $time[$key] = $row['time']; 
} 
array_multisort($time, SORT_ASC, $movies[$elements['key']]); 
unset($time); 
} 
0

我遇到過類似的問題。顯然一些舊版本的array_multisort不能正確地使用混合值。我正在爲確切的錯誤和版本進行挖掘,但是在那裏我發現它現在逃脫了我。如果我找到它,我會更新它。

2

您正在運行PHP4或5嗎?在4中,foreach循環不會像5中那樣創建引用。這可能是您的第二個代碼示例無法正常工作的原因。如果是這樣的話,你可以將其轉換爲一個for循環...

for ($i = 0; $i < count($movies); $i++) { 
    foreach ($movies[$i] as $key => $row) { 
    $time[$key] = $row['time']; 
    } 
    array_multisort($time, SORT_ASC, $movies[$i]); 
    unset($time); 
} 
+0

運行PHP4,以便解釋一些事情。儘管你的解決方案不起作用,因爲你不能在assoc中引用一個項目。具有數字索引的數組(例如array ['value']!= array [0]) – vindia 2010-01-05 14:49:22