如何在php中对多维数组排序

如何在php中对多维数组排序,php,arrays,sorting,Php,Arrays,Sorting,我知道这个问题已经被问过很多次了,但我还没有看到像这样构建的阵列。我已经尝试了我发现的众多例子中的一些,但似乎没有一个能奏效 我正在编辑一个PHP程序,该程序创建UPS费率的下拉列表。此程序中的函数创建一个如下结构的数组。我希望能够根据[价格]对该数组进行排序 Array ( [price] => Array ( [0] => 617.75 [1] => 632.97 [2

我知道这个问题已经被问过很多次了,但我还没有看到像这样构建的阵列。我已经尝试了我发现的众多例子中的一些,但似乎没有一个能奏效

我正在编辑一个PHP程序,该程序创建UPS费率的下拉列表。此程序中的函数创建一个如下结构的数组。我希望能够根据[价格]对该数组进行排序

Array
(

    [price] => Array

        (

            [0] => 617.75

            [1] => 632.97

            [2] => 782.77

            [3] => 597.93

            [4] => 337.00

        )


    [option_value] => Array

        (

            [0] => 07

            [1] => 08

            [2] => 54

            [3] => 65

            [4] => 11

        )


    [option_name] => Array

        (

            [0] => WorldWide Express

            [1] => WorldWide Expedited

            [2] => WorldWide Express Plus

            [3] => International Saver

            [4] => International Standard

        )


)

排列1\u排序\u顺序

用于对上一个数组参数进行排序的顺序。
SORT\u ASC
按升序排序或
SORT\u DESC
按降序排序

此参数可以与array1_sort_标志交换或完全忽略,在这种情况下,假定为
sort_ASC

排序类型标志:

定期排序-正常比较项目(不更改类型)
按数字排序-按数字比较项目
对字符串进行排序-将项目作为字符串进行比较
排序\区域设置\字符串-根据当前区域设置将项目作为字符串进行比较。它使用区域设置,可以使用setlocale()更改该区域设置
排序\u NATURAL-使用natsort()等“自然排序”将项目作为字符串进行比较
排序标志\u大小写-可与排序字符串或排序自然组合(按位或),对字符串大小写进行不敏感排序


SRC:

对于升序,我会尝试:

array_multisort($array['price'], SORT_ASC, $array['option_value'], $array['option_name']);
要与另一个答案一起重新构造阵列,请执行以下操作:

foreach($array['price'] as $key => $value) {
    $result[] = array('price'=>$array['price'][$key],
                      'option_value'=>$array['option_value'][$key],
                      'option_name'=>$array['option_name'][$key]);
}
array_multisort(array_column($result, 'price'), SORT_ASC, $result);

首先,我要将数据集重构为合理的:

$i = 0;
    $result = [];
    while($i < count($source['price']) ) {
        $result[$i] = [
                'price' => $source['price'][$i],
                'option_value' => $source['option_value'][$i],
                'option_name' => $source['option_name'][$i]
            ];
        ++$i;
    }
$i=0;
$result=[];
而($i$source['price'][$i],
'option_value'=>$source['option_value'][$i],
'option_name'=>$source['option_name'][$i]
];
++$i;
}
然后,使用usort对结果进行排序:

function sort_by_price($a, $b) {
if ($a['price'] == $b['price']) {
    return 0;
}
    return ($a['price'] < $b['price']) ? -1 : 1;
}
usort($result, "sort_by_price");
函数按价格排序($a,$b){
如果($a['price']=$b['price']){
返回0;
}
回报($a['price']<$b['price'])?-1:1;
}
usort($result,“按价格排序”);
我该怎么办

$price = $array['price'];
asort($price);
foreach($price as $key=>$val){
    echo $val.'='.$array['option_value'][$key].'='.$array['option_name'][$key].'<br />';
}
$price=$array['price'];
asort(价格);
foreach($key=>$val的价格){
echo$val.='.$array['option\u value'][$key].='.$array['option\u name'][$key].
; }
我使用asort对值ASC进行排序并保留数组键。还可以使用arsort对数组值DESC进行排序

asort:


arsort:

您能告诉我们这些尝试吗?假设其他数组与prices数组无关:
natsort($array['price'])@ᵈˑ我不会这么认为。@abracadver没有具体说明。考虑到阵列设计,假设是合适的。@ʰᵈˑ考虑到阵列设计,我的假设正好相反:-)非常感谢。我尝试了array_multisort函数,但肯定没有正确使用它。
$price = $array['price'];
asort($price);
foreach($price as $key=>$val){
    echo $val.'='.$array['option_value'][$key].'='.$array['option_name'][$key].'<br />';
}