2014-01-31 62 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); 
?>