根据另一个数组按键对数组进行排序?

2022-08-30 06:31:25

在PHP中可以做这样的事情吗?你会如何编写一个函数?下面是一个示例。顺序是最重要的事情。

$customer['address'] = '123 fake st';
$customer['name'] = 'Tim';
$customer['dob'] = '12/08/1986';
$customer['dontSortMe'] = 'this value doesnt need to be sorted';

我想做这样的事情

$properOrderedArray = sortArrayByArray($customer, array('name', 'dob', 'address'));

因为在最后我使用foreach()并且它们的顺序不正确(因为我将值附加到需要按正确顺序排列的字符串中,并且我事先不知道所有数组键/值)。

我已经查看了PHP的内部数组函数,但似乎您只能按字母顺序或数字排序。


答案 1

只需使用array_mergearray_replace。 的工作原理是从您为其提供的数组(以正确的顺序)开始,然后用实际数组中的数据覆盖/添加键:array_merge

$customer['address']    = '123 fake st';
$customer['name']       = 'Tim';
$customer['dob']        = '12/08/1986';
$customer['dontSortMe'] = 'this value doesnt need to be sorted';

$properOrderedArray = array_merge(array_flip(array('name', 'dob', 'address')), $customer);
// or
$properOrderedArray = array_replace(array_flip(array('name', 'dob', 'address')), $customer);

// $properOrderedArray: array(
//   'name'       => 'Tim',
//   'dob'        => '12/08/1986',
//   'address'    => '123 fake st',
//   'dontSortMe' => 'this value doesnt need to be sorted')

PS:我正在回答这个“陈旧”的问题,因为我认为之前给出的所有循环都是过度的。


答案 2

给你:

function sortArrayByArray(array $array, array $orderArray) {
    $ordered = array();
    foreach ($orderArray as $key) {
        if (array_key_exists($key, $array)) {
            $ordered[$key] = $array[$key];
            unset($array[$key]);
        }
    }
    return $ordered + $array;
}