代码之家  ›  专栏  ›  技术社区  ›  Faye D.

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

  •  0
  • Faye D.  · 技术社区  · 3 年前

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

    假设以下数组:

    $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 我只是想到了排序数组解决方案,因为它将更加优雅和简短。首先,我将按照优先顺序对数组进行排序,然后取第一个值。

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

    1 回复  |  直到 3 年前
        1
  •  1
  •   P. Tisa    3 年前

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

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