簡體   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