PHP按另一个数组排序多维数组

时间:2014-01-31 01:21:47

标签: php arrays sorting multidimensional-array

如何根据另一个数组对已定义的数组进行排序?在我们的CMS中,我们有一个表单,它使用jQuery可排序小部件对表单中的行进行排序。最初使用多维数组创建表单行。保存后,数据将保存在序列化数组中。因此,无论何时对行进行排序并保存,数据都会以“排序”顺序保存,这就是应该如何排序的。我们遇到的问题是表单仍然按原始数组的顺序输出,而不是保存的排序数组。

是否有办法按保存的排序数组的顺序对原始数组进行排序?

以下是原始数组和顺序的外观:

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@email.com
        )

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

)

因此,从数组中,字段行是那里的组ID。是否有办法根据该组ID进行排序?

1 个答案:

答案 0 :(得分: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); 
?>