首页 > 解决方案 > 如何使用整数数组重新映射我的数组键?

问题描述

这是我的原始项目数组

$items = [
    0 => 'item 1',
    1 => 'item 2',
    2 => 'item 3'
];

我想根据它们的键更改项目的顺序,所以我正在这样做......

$reorder = [2,0,1];

uksort($items, function($key1, $key2) use ($reorder) {
    return (array_search($key1, $reorder) > array_search($key2, $reorder));
});

这可以正常工作,并产生正确的结果。

$items = [
    2 => 'item 3',
    0 => 'item 1',
    1 => 'item 2'
];

但是,当在 Laravel 中将其作为 json 返回时,新排序的$items会恢复到原始顺序,这显然不是我想要的。

有没有办法在重新排序时重新映射数组键?

标签: phplaravel

解决方案


你究竟是如何在 Laravel 中返​​回数组的?以下示例完全符合您的要求。

Route::get('/test', function () {
    $items = [
        0 => 'item 1',
        1 => 'item 2',
        2 => 'item 3'
    ];

    $reorder = [2,0,1];
    uksort($items, function($key1, $key2) use ($reorder) {
        return (array_search($key1, $reorder) > array_search($key2, $reorder));
    });

    return response()->json($items);
    // {"2":"item 3","0":"item 1","1":"item 2"}
});

如果您在浏览器中尝试过,请记住某些浏览器会自动重新排序 json 数组。在这种情况下,您必须获取原始数据而不是格式化数据。


推荐阅读