【问题标题】:Sort an array in a specific order of its keys按其键的特定顺序对数组进行排序
【发布时间】:2021-09-10 07:55:23
【问题描述】:

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

假设如下数组:

$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

【问题讨论】:

    标签: php sorting array-multisort


    【解决方案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);

    【讨论】:

    • 但是为什么股票array_multisort 不适合我的情况呢?我在类似的情况下使用过很多次!我想知道我做错了什么!
    • 冒着创建时间敏感响应的风险,如果您在我发布的函数中看到参考 URL,您会注意到这个 PHP 原生函数的“用户贡献注释”中的一个相当精明的评论:@ 987654321@:
    • 就在最上面!我想知道在这里发布文档中的 cmets 是否合适,特别是如果它是另一个用户的 cmets。对我来说似乎是抄袭。
    猜你喜欢
    • 1970-01-01
    • 2020-06-03
    • 1970-01-01
    • 2019-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 1970-01-01
    相关资源
    最近更新 更多