按其键的特定顺序对数组进行排序

时间:2021-06-27 23:38:58

标签: php sorting array-multisort

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

假设有以下数组:

$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 来做到这一点。我只是想到了排序数组解决方案,因为它会更优雅和简短。所以,我会先按照偏好的顺序对数组进行排序,然后我会取第一个值。

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

1 个答案:

答案 0 :(得分:1)

我相信我知道你的意思,这是我使用了一段时间的函数,它允许对关联/多维数组进行排序:

/**
 * 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);

相关问题