2014-01-31 99 views
1

如何基於另一個數組排序已定義的數組?在我們的CMS中,我們有一個使用jQuery可排序小部件對錶單中的行進行排序的表單。表格行最初是用多維數組創建的。保存後,數據保存在序列化數組中。因此,無論何時對行進行排序並保存,數據都按照「按順序排列」的順序進行保存,這應該是如何。我們遇到的問題是表單仍然按照原始數組的順序輸出,而不是保存的排序數組。PHP按另一個數組排序多維數組

會有一種方法來按照保存的排序數組的順序排序原始數組嗎?

這裏的原始數組和秩序的樣子:

Array 
(
    [group-1] => Array 
     (
      [fields] => Array 
       (
        [name] => Array 
         (
          [type] => text 
          [name] => Full Name 
         ) 

        [email-address] => Array 
         (
          [type] => text 
          [name] => Email Address 
         ) 

       ) 
     ) 

    [group-2] => Array 
     (
      [fields] => Array 
       (
        [address] => Array 
         (
          [type] => text 
          [name] => Address 
         ) 

       ) 
     ) 

    [group-3] => Array 
     (
      [fields] => Array 
       (
        [city] => Array 
         (
          [type] => text 
          [name] => City 
         ) 

        [zip] => Array 
         (
          [type] => text 
          [name] => Zip 
         ) 

       ) 
     ) 

) 

這裏是分類保存的數據

Array 
(
    [group-3] => Array 
     (
      [city] => Apples 
      [zip] => 12345 
     ) 

    [group-1] => Array 
     (
      [name] => Tigre Woodrow 
      [email-address] => [email protected] 
     ) 

    [group-2] => Array 
     (
      [address] => 1234 Anywhere Street 
     ) 

) 

因此,從陣列,字段的行是組ID的存在。會有一種方法可以基於該組ID進行排序嗎?

+1

使用['usort'](http://php.net/usort)。 – mc10

+0

我試過用usort玩,但真的不知道它如何與兩個多維數組一起工作。 –

回答

1

下面的評論in the usort documentation聽起來像它可能會幫助你。我會盡快更新你的問題特有的代碼,但它可能會推動你朝着正確的方向發展。

如果您想根據作爲 優先級列表的另一個陣列排序數組,您可以使用此函數。

<?php 
function listcmp($a, $b) 
{ 
    global $order; 

    foreach($order as $key => $value) 
    { 
     if($a==$value) 
     { 
      return 0; 
      break; 
     } 

     if($b==$value) 
     { 
      return 1; 
      break; 
     } 
    } 
} 

$order[0] = "first"; 
$order[1] = "second"; 
$order[2] = "third"; 

$array[0] = "second"; 
$array[1] = "first"; 
$array[2] = "third"; 
$array[3] = "fourth"; 
$array[4] = "second"; 
$array[5] = "first"; 
$array[6] = "second"; 

usort($array, "listcmp"); 

print_r($array); 
?>