PHP - 按另一个数组的值对关联数组进行排序

Mik*_*ord 2 php arrays sorting

我有两个数组,一个是保存信息的多维数组,另一个是一个简单数组,保存我想要第一个数组的顺序的值。

例如,我希望第一个数组按 ID 和第二个数组中的值排序。

$用户数组:

array(3) {
    [0] => array(3) {
            'id' => 1,
            'name' => 'John Smith',
            'email' => 'john@example.com',
        },
    [2] => array(3) {
            'id' => 2,
            'name' => 'Jane Smith',
            'email' => 'jane@example.com',
        },
    [0] => array(3) {
            'id' => 3,
            'name' => 'Jack Smith',
            'email' => 'Jack@example.com',
        },
}
Run Code Online (Sandbox Code Playgroud)

$订单数组:

array(3) {
    [0] => '2',
    [1] => '3',
    [2] => '1',
}
Run Code Online (Sandbox Code Playgroud)

我希望排序数组的结果是:

array(3) {
    [0] => array(3) {
            'id' => 2,
            'name' => 'Jane Smith',
            'email' => 'jane@example.com',
        },
    [2] => array(3) {
            'id' => 3,
            'name' => 'Jack Smith',
            'email' => 'jack@example.com',
        },
    [0] => array(3) {
            'id' => 1,
            'name' => 'John Smith',
            'email' => 'John@example.com',
        },
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我希望对数组键重新索引,因此它们始终从 0 开始按顺序排列,但 $users 数组中每个元素的值要重新排序。

sev*_*etl 5

你可以这样做:

// Index users by ID
$users = array_combine(
    array_column($users, 'id'),
    $users
);

// Order the users
$users = array_map(function ($id) use ($users) {
    return $users[$id];
}, $order);
Run Code Online (Sandbox Code Playgroud)

这里我使用了array_combine()函数,它通过将给定的键映射到值来创建数组。对于键,我按顺序使用了所有 id(使用 抓取它们array_column())。

拥有这种形式的数组,我可以循环$order数组并按索引从数组中获取值$users,这些值实际上具有现在的值id

foreach我没有使用循环,而是使用了array_map()函数。如果您有一个集合(即数组),最好使用高阶函数来处理它们。如果您是初学者,这可能会令人不知所措,但您必须学习这一点,因为这就是当今的做法。

这是工作示例。