繁体   English   中英

如何重新排列数组的PHP?

[英]how to reorder array php?

我有数组,我需要通过另一个数组重新排序:

这是我的数组:

Array
(
    [0] => Array
        (
            [name] => Haroldas
            [number] => 444
            [address] => g.
            [city] => eee
            [country] => f
            [lastname] => r
        )

    [1] => Array
        (
            [name] => Lukas
            [number] => 999
            [address] => rrr
            [city] => tttt
            [country] => 3
            [lastname] => r
        )
)

这是另一个带有列号的数组,向我展示了如何订购编号(列订购可以是另一个):

Array
(
    [lastname] => 4
    [name] => 1
    [number] => 5
    [address] => 3
    [city] => 0
    [country] => 2
) 

我需要这样的结果:

Array
    (
        [0] => Array
            (
                [city] => eee
                [name] => Haroldas
                [country] => f
                [address] => g.
                [lastname] => r
                [number] => 444
            )
    ...
    )

这应该做的工作:

<?php

$order = [
    'city'     => 0,
    'name'     => 1,
    'country'  => 2,
    'address'  => 3,
    'lastname' => 4,
    'number'   => 5,
];

$data = [
    [
        'name'     => 'Haroldas',
        'number'   => '444',
        'address'  => 'g.',
        'city'     => 'eee',
        'country'  => 'f',
        'lastname' => 'r',
    ],
    [
        'name'     => 'Lukas',
        'number'   => '999',
        'address'  => 'rrr',
        'city'     => 'ttt',
        'country'  => 3,
        'lastname' => 'r',
    ],
];

foreach ($data as &$entry) {
    uksort($entry, function ($a, $b) use ($order) {
        return strcmp($order[$a], $order[$b]);
    });
}

print_r($data);

输出为:

Array
(
    [0] => Array
        (
            [city] => eee
            [name] => Haroldas
            [country] => f
            [address] => g.
            [lastname] => r
            [number] => 444
        )

    [1] => Array
        (
            [city] => ttt
            [name] => Lukas
            [country] => 3
            [address] => rrr
            [lastname] => r
            [number] => 999
        )

)

如果要使用foreach重新排序,请创建一个新数组。

     $arrReorder = [];
    foreach($yourArr as $key => $val){
        $arrReorder[] = ['city' => $val['city'], 'name' => $val['name'], 'country' => $val['country'], 'address' => $val['address'], 'lastname' => $val['lastname'], 'number' => $val['number']  ];
    }
   print_r($arrReorder);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM