在多维数组中重新排列数组键[PHP]

时间:2015-03-27 12:30:29

标签: php sorting multidimensional-array

希望你能提供帮助。 我目前正在构建一个CMS并试图变得聪明,任何需要列表视图类型的外观的页面都可以重用。 调用此列表视图html代码的页面(控制器)将基本准备所需的数据,但是我现在正在从数据库中获取数据,我想重新排列数组键。 例如,假设我的查询返回了firstname,lastname,email,pkey,createdate当前我的代码会按顺序显示它但是我想看看是否有一种方法我可以重新排列它们来说像是 pkey,email,firstname,lastname,createdate。

别误会我的意思,我可以分解sql查询并定义顺序,但是在考虑是否有通过PHP可以在多维数组上工作的东西?

提前致谢

拉​​吉

1 个答案:

答案 0 :(得分:1)

听起来像是uksort()蝙蝠侠!

$data = [
    'firstname' => 'Mark',
    'lastname' => 'Baker',
    'email' => 'mymailbox@mydomain.com',
    'pkey' => 'private',
    'createdate' => '2015-12-19',
];

$order = ['pkey', 'email', 'firstname', 'lastname', 'createdate'];

uksort(
    $data,
    function($a, $b) use ($order) {
        return array_search($a, $order) > array_search($b, $order);
    }
);
var_dump($data);

修改

如果你有一个多维数组,那么使用array_walk循环遍历顶层,使用这个代码逻辑作为你的回调:

$order = ['pkey', 'email', 'firstname', 'lastname', 'createdate'];
array_walk(
    $myGiantArrayOfAllUsers,
    function(&$data) use ($order) {
        uksort(
            $data,
            function($a, $b) use ($order) {
                return array_search($a, $order) > array_search($b, $order);
            }
        );
    }
);

或者只是使用我之前的代码,因为您在显示它们的位置对数组元素进行了预处理