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


Re-arranging array keys in multiple dimension array [PHP]

希望您能提供帮助。我目前正在构建一个CMS,并试图巧妙地使用任何需要列表视图类型的外观的页面。调用这个列表视图html代码的页面(控制器)基本上会准备所需的数据,但我现在正忙于从数据库中获取数据的位置,我想重新排列数组键。例如,假设我的查询返回了firstname、lastname、email、pkey、createdate,当前我的代码会按照这个顺序显示它,但我想看看是否有办法重新排列它们的键,比如pkey,电子邮件,名字,姓氏,创建日期。

不要误解我的意思,我当时可以分解sql查询并定义顺序,但我在想,如果有什么东西可以通过PHP在多维数组上工作?

提前感谢

Raj

听起来像是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);
            }
        );
    }
);

或者简单地使用我以前的代码,在显示数组元素的位置对其进行预处理