繁体   English   中英

如何根据 PHP 中另一个(部分)数组的值对数组进行排序?

[英]How to sort an array based on the values of another (partial) array in PHP?

如何根据 PHP 中另一个(部分)数组的值对数组进行排序? $toBeSorted是目标数组, $sortByThis提供键(不是所有键!):

// Array to be sorted (mantaining key-values correlations)
$toBeSorted = array(
    'id'       => 'Identifier',
    'username' => 'Username',
    'phone'    => 'Phone number',
    'email'    => 'E-mail',
);

$sortByThis = array('username', 'id');

// Result should be username, id, email, phone
// The remaining portion of array should be sorted with ksort()

我记得(但我不是 100% 确定)一个可以快速执行此操作的函数。 其实我用过:

// Sort the first portion of the array
$sorted = array_intersect_key($toBeSorted, array_flip($sortByThis));

// Sort the remaining portion
$remain = array_diff_key($toBeSorted, $sorted);
ksort($remain);

$toBeSorted = array_merge($sorted, $remain);

你可以使用uksort来组合。

uksort($toBeSorted, function($a, $b) use ($sortByThis) {
    $key_a = array_search($a, $sortByThis);
    $key_b = array_search($b, $sortByThis);
    if ($key_a === false && $key_b === false) {
        return strcmp($a, $b);
    } else if ($key_a === false) {
        return 1;
    } else if ($key_b === false) {
        return -1;
    } else {
        return $key_a - $key_b;
    }
});

演示。

简单地使用array_merge似乎工作:

ksort($toBeSorted);
print_r(array_merge(array_flip($sortByThis), $toBeSorted));

输出:

Array
(
    [username] => Username
    [id] => Identifier
    [email] => E-mail
    [phone] => Phone number
)

链接到键盘

看看 array_multisort() 函数。 http://php.net/manual/en/function.array-multisort.php

你可以通过做这样的事情来实现这一点。

$sorted_arr= array_multisort($toBeSorted, array('username'=>SORT_ASC, 'id'=>SORT_ASC));

如果这对您没有帮助,还有用户提交的其他功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM