Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中对多个不同键上的多维数组进行排序?_Php_Arrays_Multidimensional Array - Fatal编程技术网

如何在PHP中对多个不同键上的多维数组进行排序?

如何在PHP中对多个不同键上的多维数组进行排序?,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我正在从数据库返回的数组创建多维数组。然后我需要对在3个不同键上创建的数组进行排序。这是我的数组 foreach($priceList->data as $obj){ $d1d2[] = $obj->d1d2desc; $grade[] = $obj->grade; $species[] = $obj->species; $woodDesc[] = $obj->wooddesc; $prefix[] = $obj->pr

我正在从数据库返回的数组创建多维数组。然后我需要对在3个不同键上创建的数组进行排序。这是我的数组

foreach($priceList->data as $obj){
    $d1d2[] = $obj->d1d2desc;
    $grade[] = $obj->grade;
    $species[] = $obj->species;
    $woodDesc[] = $obj->wooddesc;
    $prefix[] = $obj->prefix;
}

$pricing = array(
     $d1d2,
     $grade,
     $species,
     $woodDesc,
     $prefix
     );
该数组的工作方式与我可以使用
print\u r
var\u dump
的工作方式相同,并确保我拥有该数组所需的一切。然后我需要按三个内部数组对定价数组进行排序。首先是
$d1d2
,然后是
$grade
,然后是
$species

我试过使用
multisort
ksort
甚至
msort
,但我什么都做不到。有人能给我指出正确的方向吗

这是我的打印输出:

Array ( [0] => Array ( [0] => 2X10 [1] => 2X10 [2] => 2X10 [3] => 2X10 [4] => 2X12 [5] => 2X12 [6] => 2X12 [7] => 2X12 [8] => 2X4 [9] => 2X4 [10] => 2X4 [11] => 2X4 [12] => 2X4 [13] => 1X4 [14] => 1X6 [15] => 2X10 [16] => 2X10 [17] => 2X10 [18] => 2X10 [19] => 2X12 [20] => 2X12 [21] => 2X12 [22] => 2X12 [23] => 2X4 [24] => 2X4 [25] => 2X4 [26] => 2X4 [27] => 2X4 [28] => 2X6 [29] => 2X6 [30] => 2X6 [31] => 2X6 [32] => 2X6 [33] => 2X 8 [34] => 2X8 [35] => 2X 8 [36] => 2X8 [37] => 2X 8 [38] => 4X8 [39] => 4X8 [40] => 4X8 [41] => 4X8 [42] => 4X8 [43] => 4X8 [44] => 4X8 [45] => 4X8 [46] => 4X8 [47] => 4X8 [48] => 4X8 [49] => 4X8 [50] => 4X8 [51] => 4X8 [52] => 4X8 [53] => 4X8 [54] => 4X8 [55] => 4X8 [56] => 4X8 [57] => 4X8 [58] => 4X8 [59] => 4X8 [60] => 4X8 [61] => 4X8 [62] => 4X8 [63] => 4X8 [64] => 4X8 [65] => 4X8 [66] => 4X8 [67] => 4X8 [d1d2] => ) [1] => Array ( [0] => #2 [1] => #2 [2] => #2 [3] => #2 [4] => #2 [5] => #2 [6] => #2 [7] => #2 [8] => #2 [9] => #2 [10] => #2 [11] => #2 [12] => #2 [13] => [14] => [15] => #2 [16] => #2 [17] => #2 [18] => #2 [19] => #2 [20] => #2 [21] => #2 [22] => #2 [23] => #2 [24] => #2 [25] => #2 [26] => #2 [27] => #2 [28] => #2 [29] => #2 [30] => #2 [31] => #2 [32] => #2 [33] => [34] => #2 [35] => [36] => #2 [37] => [38] => [39] => [40] => [41] => [42] => [43] => [44] => [45] => [46] => [47] => [48] => [49] => [50] => [51] => [52] => [53] => [54] => [55] => [56] => [57] => [58] => [59] => [60] => [61] => [62] => [63] => [64] => [65] => [66] => [67] => [d1d2] => ) [2] => Array ( [0] => HEM FIR [1] => HEM FIR [2] => HEM FIR [3] => HEM FIR [4] => HEM FIR [5] => HEM FIR [6] => HEM FIR [7] => HEM FIR [8] => SPF [9] => SPF [10] => SPF [11] => SPF [12] => SPF [13] => SPF [14] => SPF [15] => HEM FIR [16] => HEM FIR [17] => HEM FIR [18] => HEM FIR [19] => HEM FIR [20] => HEM FIR [21] => HEM FIR [22] => HEM FIR [23] => SPF [24] => SPF [25] => SPF [26] => SPF [27] => SPF [28] => SPF [29] => SPF [30] => SPF [31] => SPF [32] => SPF [33] => SPF [34] => SPF [35] => SPF [36] => SPF [37] => SPF [38] => SYP [39] => SYP [40] => SYP [41] => SYP [42] => SYP [43] => SYP [44] => SYP [45] => SYP [46] => FIR [47] => SYP [48] => FIR [49] => SYP [50] => FIR [51] => FIR [52] => FIR [53] => FIR [54] => FIR [55] => SYP [56] => SYP [57] => SYP [58] => SYP [59] => SYP [60] => SYP [61] => SYP [62] => SYP [63] => SYP [64] => SYP [65] => SYP [66] => SYP [67] => SYP [d1d2] => ) [3] => Array ( [0] => [1] => [2] => [3] => [4] => [5] => [6] => [7] => [8] => [9] => [10] => [11] => [12] => [13] => UTILITY GRADE [14] => UTILITY GRADE [15] => [16] => [17] => [18] => [19] => [20] => [21] => [22] => [23] => [24] => [25] => [26] => [27] => [28] => [29] => [30] => [31] => [32] => [33] => [34] => [35] => [36] => [37] => [38] => RSH 4-PLY [39] => RSH [40] => RSH [41] => BCX [42] => RSH 4-PLY [43] => RSH [44] => RSH [45] => S/F T&G [46] => RSH 4-PLY [47] => RSH 4-PLY [48] => RSH 4-PLY [49] => RSH [50] => RSH [51] => RSH [52] => ACX [53] => ACX [54] => ACX [55] => ACX [56] => ACX [57] => ACX [58] => BCX [59] => BCX [60] => BCX [61] => RSH 4-PLY [62] => RSH [63] => RSH [64] => RSH 4-PLY [65] => RSH [66] => RSH [67] => S/F T&G [d1d2] => ) [4] => Array ( [0] => [1] => [2] => [3] => [4] => [5] => [6] => [7] => [8] => [9] => [10] => [11] => [12] => [13] => [14] => [15] => [16] => [17] => [18] => [19] => [20] => [21] => [22] => [23] => [24] => [25] => [26] => [27] => [28] => [29] => [30] => [31] => [32] => [33] => [34] => [35] => [36] => [37] => [38] => [39] => [40] => [41] => [42] => [43] => [44] => [45] => [46] => FSC MIXED CR [47] => [48] => [49] => [50] => [51] => [52] => [53] => [54] => [55] => [56] => [57] => [58] => [59] => [60] => [61] => FSC MIXED CR [62] => FSC MIXED CR [63] => FSC MIXED CR [64] => [65] => [66] => [67] => [d1d2] => ) )

当我试图对它进行排序时,我没有得到零钱。我删除了我正在使用的multisort方法,并尝试了其他一些也不起作用的方法。因此,我不再需要包含它的代码了。

您确定
数组\u multisort
不起作用吗

array_multisort(
        $pricing->d1d2, SORT_ASC, SORT_NUMERIC,
        $pricing->grade, SORT_ASC, SORT_NUMERIC,
        $pricing->species, SORT_ASC, SORT_NUMERIC
);


编辑

这么多时间没有编写PHP,我错过了
array\u multisort
必须包含所有成员:

array_multisort(
        $pricing[0], SORT_ASC, SORT_NUMERIC,
        $pricing[1], SORT_ASC, SORT_NUMERIC,
        $pricing[2], SORT_ASC, SORT_NUMERIC,
        $pricing[3], SORT_ASC, SORT_NUMERIC,
        $pricing[4], SORT_ASC, SORT_NUMERIC
);

更新

这些是
array\u multisort
支持的排序类型:

SORT_REGULAR-默认值。正常比较元素(标准ASCII)

排序\数值-将元素作为数值进行比较

排序\u字符串-将元素作为字符串值进行比较

排序\区域设置\字符串-根据当前区域设置将元素作为字符串进行比较(可以使用setlocale()进行更改)

SORT_NATURAL-使用natsort()等“自然排序”将元素作为字符串进行比较


SORT\u FLAG\u CASE-可以与SORT\u STRING或SORT\u NATURAL组合(按位或)来对字符串大小写进行不敏感的排序

您确定
数组\u multisort
不起作用吗

array_multisort(
        $pricing->d1d2, SORT_ASC, SORT_NUMERIC,
        $pricing->grade, SORT_ASC, SORT_NUMERIC,
        $pricing->species, SORT_ASC, SORT_NUMERIC
);


编辑

这么多时间没有编写PHP,我错过了
array\u multisort
必须包含所有成员:

array_multisort(
        $pricing[0], SORT_ASC, SORT_NUMERIC,
        $pricing[1], SORT_ASC, SORT_NUMERIC,
        $pricing[2], SORT_ASC, SORT_NUMERIC,
        $pricing[3], SORT_ASC, SORT_NUMERIC,
        $pricing[4], SORT_ASC, SORT_NUMERIC
);

更新

这些是
array\u multisort
支持的排序类型:

SORT_REGULAR-默认值。正常比较元素(标准ASCII)

排序\数值-将元素作为数值进行比较

排序\u字符串-将元素作为字符串值进行比较

排序\区域设置\字符串-根据当前区域设置将元素作为字符串进行比较(可以使用setlocale()进行更改)

SORT_NATURAL-使用natsort()等“自然排序”将元素作为字符串进行比较


SORT_FLAG_CASE-可以与SORT_STRING或SORT_NATURAL组合(按位或)来对字符串大小写进行不敏感排序

我通过编写排序方法并使用usort()处理过类似的情况;我更容易把排序看作是代码

// sort data along 3 axes, each in increasing order
function comparData( $a, $b ) {
    if ($a->d1d2 < $b->d1d2) return -1;
    if ($a->d1d2 > $b->d1d2) return 1;
    if ($a->grade < $b->grade) return -1;
    if ($a->grade > $b->grade) return 1;
    if ($a->species < $b->species) return -1;
    if ($b->species > $b->species) return 1;
    return 0;
}

$data = $priceList->data;
usort($data, 'comparData');
//沿3个轴对数据进行排序,每个轴按递增顺序排列
函数数据($a,$b){
如果($a->d1d2<$b->d1d2)返回-1;
如果($a->d1d2>$b->d1d2)返回1;
如果($a->grade<$b->grade)返回-1;
如果($a->grade>$b->grade)返回1;
如果($a->species<$b->species)返回-1;
如果($b->种类>$b->种类)返回1;
返回0;
}
$data=$priceList->data;
usort($data,'comparData');

将数据按顺序排序;现在,当您构建单独的数组时,它们将按排序顺序构建。

我通过编写排序方法并使用usort()处理过类似的情况;我更容易把排序看作是代码

// sort data along 3 axes, each in increasing order
function comparData( $a, $b ) {
    if ($a->d1d2 < $b->d1d2) return -1;
    if ($a->d1d2 > $b->d1d2) return 1;
    if ($a->grade < $b->grade) return -1;
    if ($a->grade > $b->grade) return 1;
    if ($a->species < $b->species) return -1;
    if ($b->species > $b->species) return 1;
    return 0;
}

$data = $priceList->data;
usort($data, 'comparData');
//沿3个轴对数据进行排序,每个轴按递增顺序排列
函数数据($a,$b){
如果($a->d1d2<$b->d1d2)返回-1;
如果($a->d1d2>$b->d1d2)返回1;
如果($a->grade<$b->grade)返回-1;
如果($a->grade>$b->grade)返回1;
如果($a->species<$b->species)返回-1;
如果($b->种类>$b->种类)返回1;
返回0;
}
$data=$priceList->data;
usort($data,'comparData');

将数据按顺序排序;现在,当您构建单独的数组时,它们将按排序顺序构建。

问题还不清楚。“我需要对定价数组进行排序”--
$pricing
数组只是其他几个数组的占位符,它应该如何排序?这听起来像是一个例子。它允许您定义排序函数。在普通的PHP中,没有任何东西会知道如何处理多个属性。您能举例说明如何实现多端口吗?在我看来,您有以下问题中的保存问题:请给我们
打印\u r
,然后按照您的意愿进行订购,并将其提供给我们。因此,您希望如何对其进行排序。目前,
$pricing
包含5个项目。您希望这5个项目的顺序是什么?问题不清楚。“我需要对定价数组进行排序”--
$pricing
数组只是其他几个数组的占位符,它应该如何排序?这听起来像是一个例子。它允许您定义排序函数。在普通的PHP中,没有任何东西会知道如何处理多个属性。您能举例说明如何实现多端口吗?在我看来,您有以下问题中的保存问题:请给我们
打印\u r
,然后按照您的意愿进行订购,并将其提供给我们。因此,您希望如何对其进行排序。目前,
$pricing
包含5个项目。您希望这5个项目的顺序是什么?我认为
$pricing->d1d2
等必须被
$pricing[0]
等替代。现在检查它。也尝试了,它确实改变了顺序,但排序不正确。。。例如2X4、2X12、2X4、2X6。。。等等,您是否尝试过定制它以满足您的需求?请注意,您可能需要
SORT\u DESC
而不是
SORT\u ASC
SORT\u STRING
而不是
SORT\u NUMERIC
。我尝试更改它们,发现了一些问题。。。我现在有2X10,2X12,在2X4,2X6,2X8之前出现。。。所以,我想知道两位数(10,12)是否会使排序失败?我想我知道了。现在检查我的答案。我想
$pricing-