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']?