PHP中的多维数组值排序

PHP中的多维数组值排序,php,sorting,arrays,multidimensional-array,Php,Sorting,Arrays,Multidimensional Array,我正在构建一个数组,其中包含一组数据库字段,其中包含关于表、实际字段名和描述性字段名的信息,作为多维数组。以下是它当前的样子: $Fields['User']['ID'] = "User ID"; $Fields['User']['FirstName'] = "First Name"; $Fields['Stats']['FavouriteOrder'] = "Favourite Item Ordered"; $Fields['Geographic']['Location'] = "Curren

我正在构建一个数组,其中包含一组数据库字段,其中包含关于表、实际字段名和描述性字段名的信息,作为多维数组。以下是它当前的样子:

$Fields['User']['ID'] = "User ID";
$Fields['User']['FirstName'] = "First Name";
$Fields['Stats']['FavouriteOrder'] = "Favourite Item Ordered";
$Fields['Geographic']['Location'] = "Current Location";
$Fields['Geographic']['LocationCode'] = "Current Location Code";
好的,这很好,但我正在将其导入一个允许导出所选字段的系统中,最后我希望在不同级别中进行foreach,提取数据,然后最终使用描述性名称按字母顺序显示所有描述性字段。因此,最终的顺序是:当前位置、当前位置代码、所订购的收藏项目、名字,然后是用户ID——显然保持索引关联


我不能使用usort和array\U multisort。。。或者我可以,但我不知道怎么做。usort似乎需要一个键来排序,但我有可变键。数组\u multisort似乎与sort实际上的作用相同。

这仅适用于二维数组。这不是我写过的最优雅的代码,但它可以工作

    foreach($Fields as $key=>$var) {
        ksort($var);
        $Fields[$key]=$var;
    }
    ksort($Fields);

让我举一个真实数据的例子,而不是假数据,因为假数据几乎让我困惑。因此,虚假数据被注释

/*
$Fields['User']['ID'] = "User ID";
$Fields['User']['FirstName'] = "First Name";
$Fields['Stats']['FavouriteOrder'] = "Favourite Item Ordered";
$Fields['Geographic']['Location'] = "Current Location";
$Fields['Geographic']['LocationCode'] = "Current Location Code";
*/

$Fields['Product']['ReferenceNumber'] = "Product Reference Number";
$Fields['Product']['Halaal'] = "Halaal Status";
$Fields['Product']['Kosher'] = "Kosher Status";
$Fields['Product']['KosherType'] = "Kosher Type";
$Fields['Product']['CuringSalts'] = "Curing Salts Status";
$Fields['Product']['ProductVisibility'] = "Product Visibility";
$Fields['Product']['ProductStatus'] = "Product Status";
$Fields['Product']['PackBarCode'] = "Barcode";
$Fields['Product']['ProductDescription'] = "Product Description";
$Fields['Pack']['PackSize'] = "Pack Size";
$Fields['Pack']['PackSizeNumeric'] = "Numeric Pack Size";
$Fields['Allergens']['ContainsNuts'] = "Product Contains Nuts";


foreach ($Fields as $key => $value) {
    ksort($value);
    $Fields[$key] = $value;
}
ksort($Fields);
我有一个“那些”星期五。。。print_r$字段显示正在对键进行排序并关联值,但仍按键排序,而不是按结束值排序

这几乎就像我需要一个反向排序系统,它首先检查所有值,对它们进行排序,然后说‘好的,你属于哪里?’。。。啊,你属于表Y中的FieldX'

我希望有一种巧妙的方法可以做到这一点,也许有,但我想我会编写一个函数来解析数据,编写一个反向数组,然后按值顺序重新编写原始数组。效率非常低,但也可以


尽管如此,我仍然愿意接受更好的建议

好吧,一点也不优雅。因此,我不鼓励使用这种方法,并将寻找更好的方法。但我得到的解决方案适用于上面和下面的例子

不幸的是,按照我希望的方式,数组必须包含前面的“排序”编号,因此,我认为从一开始我就失败了。但它现在起作用了

$TempDescArray = array();
$TempFieldArray = array();
$TempTableArray = array();
$Pointer = 0;

foreach ($Fields as $Table => $FieldsArray) {   
    foreach ($FieldsArray as $Field => $Description) {
        $TempDescArray[$Pointer] = $Description;
        $TempFieldArray[$Pointer] = $Field;
        $TempTableArray[$Pointer] = $Table;
        $Pointer++;
    }
}

asort($TempDescArray);
$Fields = array();
$Pointer2 = 0;

foreach ($TempDescArray as $Pointer => $Description) {
    $Fields[$Pointer2][$TempTableArray[$Pointer]][$TempFieldArray[$Pointer]] = $Description;
    $Pointer2++;
}

昨天,我在做一个项目,我必须解决这个问题——这是我的代码:

资源数组如下所示:

$resource[$count]['title']
$resource[$count]['filepath']
$resource[$count]['filename']
$resource[$count]['taxonomy'][0]
两个按标题ASC或DESC排序的排序函数

function compare_asc($a, $b) {
    return strcmp($a['title'], $b['title']);
}
function compare_desc($a, $b) {
    if ($a['title'] == $b['title']) {
        return 0;
    }
    return ($a['title'] > $b['title']) ? -1 : 1;
    //return strcmp($a['title'], $b['title']);
}
最后,在循环使用$resource并输出所需的任何内容之前,请使用usort执行脏操作

usort($resource, "compare_asc");

该结构中的值存储在哪里?值是引号中的项。。。我基本上是将描述与特定表中的特定字段相关联。很抱歉,我被字段名称和值弄糊涂了,你能发布一个预期最终输出的示例吗?好的,肯普,谢谢你的帮助,我将分解原始数组,根据值重建它,而不是,然后重新格式化,见下面我的帖子。。。好的:谁的位置是$Fields['Geographic']['location']?