2015-09-02 68 views
0

我有数组,我需要通过另一个数组重新排序:如何重新排列数组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 
      ) 
    ... 
    ) 
+0

所以,你想要一个有序字典?然后你必须按给定的顺序插入对...我认为没有解决方法。 – Amarnasan

+0

你尝试过什么吗? – Rizier123

回答

1

这应该做的工作:

<?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 
     ) 

) 
+0

哇,这是完美的。作品。非常感谢:) – Haroldas

+1

很高兴帮助。你可以通过检查'$ a'和'$ b'是否确实存在于'$ order'中来改善回调,但是出于可读性的原因,我忽略了这一点。 – Andris

0

如果你想重新排序使用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);