如何对多维数组(PHP)进行排序?

如何对多维数组(PHP)进行排序?,php,arrays,sorting,multidimensional-array,Php,Arrays,Sorting,Multidimensional Array,如何按pos属性对该数组进行排序,即使键(名称、门店id、产品等)) 编辑:性能当然很重要。看看PHP函数array\u multisort 注释中有一个示例函数,您可以使用它: function array_orderby() { $args = func_get_args(); $data = array_shift($args); foreach ($args as $n => $field) { if (is_string($field))

如何按
pos
属性对该数组进行排序,即使键
名称、门店id、产品等)


编辑:性能当然很重要。

看看PHP函数
array\u multisort

注释中有一个示例函数,您可以使用它:

function array_orderby()
{
    $args = func_get_args();
    $data = array_shift($args);
    foreach ($args as $n => $field) {
        if (is_string($field)) {
            $tmp = array();
            foreach ($data as $key => $row)
                $tmp[$key] = $row[$field];
            $args[$n] = $tmp;
            }
    }
    $args[] = &$data;
    call_user_func_array('array_multisort', $args);
    return array_pop($args);
}

// $dataArray is the array that contains your data
$sorted = array_orderby($dataArray, 'pos', SORT_DESC);

看看PHP函数
array\u multisort

注释中有一个示例函数,您可以使用它:

function array_orderby()
{
    $args = func_get_args();
    $data = array_shift($args);
    foreach ($args as $n => $field) {
        if (is_string($field)) {
            $tmp = array();
            foreach ($data as $key => $row)
                $tmp[$key] = $row[$field];
            $args[$n] = $tmp;
            }
    }
    $args[] = &$data;
    call_user_func_array('array_multisort', $args);
    return array_pop($args);
}

// $dataArray is the array that contains your data
$sorted = array_orderby($dataArray, 'pos', SORT_DESC);
您可以使用
uasort()
,它允许您定义排序逻辑并维护关联索引。请注意,它会更改原始数组,并且仅返回基于成功的布尔值

uasort($your_array, function($a, $b) {
    return $a['pos'] > $b['pos'];
});
我的示例>=PHP5.3,但对于较旧的版本,您也可以使用普通的比较函数

有关详细信息,请参阅。

您可以使用
uasort()
,它允许您定义排序逻辑并维护关联索引。请注意,它会更改原始数组,并且仅返回基于成功的布尔值

uasort($your_array, function($a, $b) {
    return $a['pos'] > $b['pos'];
});
我的示例>=PHP5.3,但对于较旧的版本,您也可以使用普通的比较函数


有关详细信息,请参阅。

@Jung-实际上我没有这么做。。。考虑到有更多的键,像这些结构,我需要订购。那么如何使用array_multisort管理它呢?我应该改变结构吗?或者更好的主意?事实上它并不像我第一次想的那么简单。但是看看链接页面,你会在评论中找到一个例子,我刚刚把它添加到我的答案中。这应按“pos”对$dataArray进行排序descending@Jung-你的例子有些问题。事实上,即使我使用你的函数提供了确切的规格,我也没有对它进行排序。这一个看起来有点过头了。@Jung-实际上我没有这样做。。。考虑到有更多的键,像这些结构,我需要订购。那么如何使用array_multisort管理它呢?我应该改变结构吗?或者更好的主意?事实上它并不像我第一次想的那么简单。但是看看链接页面,你会在评论中找到一个例子,我刚刚把它添加到我的答案中。这应按“pos”对$dataArray进行排序descending@Jung-你的例子有些问题。事实上,即使我使用你的函数提供了确切的规格,我也没有对它进行排序。这一个看起来有点过头了。你能用这个示例检查你的代码吗(与上面的结构几乎相同):
$attr['attr']['name']['pos']=30$属性['attr']['price']['pos']=10$属性['attr']['desc']['pos']=20
@dino您可以在问题中提供所需的确切规格:)。你想在这里分类什么?您可以尝试插入
$attr['attr']
来代替
$your_数组
@baz..-亲爱的耶稣。有时我的大脑不工作:)它工作得很好。谢谢,你能用这个示例检查你的代码吗(与上面的结构几乎相同):
$attr['attr']['name']['pos']=30$属性['attr']['price']['pos']=10$属性['attr']['desc']['pos']=20
@dino您可以在问题中提供所需的确切规格:)。你想在这里分类什么?您可以尝试插入
$attr['attr']
来代替
$your_数组
@baz..-亲爱的耶稣。有时我的大脑不工作:)它工作得很好。谢谢你的赏赐