首页 > 解决方案 > 按其键的特定顺序对数组进行排序

问题描述

我希望能够以特定的键顺序对数组进行排序。

假设以下数组:

$titles = array(
        'United States' => 'Dibbuk Box',
        'Australia' => 'The Possession',
        'UK' => 'The Possession',
        'getTitle' => 'The Possession',
);

首选项数组(将确定键的排序顺序)将类似于:

$preference = array(
        'UK',
        'USA',
        'World-wide, English title',
        'United Kingdom',
        'United Kingdom, English title',
        'United States',
        'United States, English title',
        'World-wide',
        'Australia',
        'getTitle',
);

所以在排序发生后,我希望第一个数组变成这样:

$titles = array(
        'UK' => The Possession',
        'United States' => 'Dibbuk Box',
        'Australia' => 'The Possession',
        'getTitle' => 'The Possession',
)

所以我的印象是下面的代码可以工作,但它没有......

array_multisort($preference, SORT_STRING, $titles);

我究竟做错了什么?

实际上,我想要实现的是根据顺序或偏好检索电影标题。所以我想得到UK标题。如果不可用,我想获得USA标题。如果那不可用,我想采取World-wide, English title,等等...

我知道我可以用嵌套if/else的 's 做到这一点。我只是想到了排序数组解决方案,因为它会更加优雅和简短。因此,我将首先按优先顺序对数组进行排序,然后取第一个值。

如果有人有更好的解决方案,请随时详细说明。TIA

标签: phpsortingarray-multisort

解决方案


我相信我知道你在做什么,这是我已经使用了一段时间的一个函数,它允许对关联/多维数组进行排序:

/**
 * Sort multi-dimensional array.
 * Extend array_multisort()
 * Usage: arrayOrderby($array, $value, SORT_FLAG, $value, SORT_FLAG)
 * See: http://php.net/manual/en/function.array-multisort.php
 * 
 * @return array
 */
function arrayOrderby() {
    $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);
}

在单个关联数组上使用此示例:

arrayOrderby($results, 'column_name', SORT_DESC);


推荐阅读