更改数组中的索引顺序

时间:2010-04-24 09:52:32

标签: php arrays sorting

现在有点困在这个上,所以任何帮助都会受到赞赏。我有一个包含元素列表的数组(左),目标是使用左数组中的值对另一个数组(右)键进行排序。

左侧数组

Array
(
    [0] => ID
    [1] => FirstName
    [2] => LastName
    [3] => Address
)

正确的数组

Array
(
    [0] => Array
    (
        [FirstName] => Pim
        [Address] => Finland
        [LastName] => Svensson
        [ID] => 3
    )
    [1] => Array
    (
        [FirstName] => Emil
        [Address] => Sweden
        [LastName] => Malm
        [ID] => 5
    )
)

我想要实现的目标与此相似

Array
(
    [0] => Array
    (
        [ID] => 3
        [FirstName] => Pim
        [LastName] => Svensson
        [Address] => Finland
    )

任何? :) 哦,我正在运行php 5.3,如果有帮助的话!

5 个答案:

答案 0 :(得分:8)

$output = array();
foreach ( $right as $array ) {
    foreach ( $left as $field ) {
        $temp[$field] = $array[$field];
    }
    $output[] = $temp;
}

答案 1 :(得分:3)

您可以使用uksort(),它允许您通过用户定义的函数对数组键进行排序。 E.g:

function sort_by_array($array) {
    // create a sorting function based on the order of the elements in the array
    $sorter = function($a, $b) use ($array) {
        // if key is not found in array that specifies the order, it is always smaller
        if(!isset($array[$a])) return -1; 
        if($array[$a] > $array[$b]) {
            return 1;
        }
        return ($array[$a] == $array[$b]) ? 0 : -1;
    };
    return $sorter;
}
// $array contains the records to sort
// $sort_array is the array that specifies the order
foreach($array as &$record) {
    uksort($record, sort_by_array(array_flip($sort_array)));
}

我利用5.3中的可能性来动态定义函数,并使用array_flip()进行转换:

Array
(
    [0] => ID
    [1] => FirstName
    [2] => LastName
    [3] => Address
)

Array
(
    [ID] => 0
    [FirstName] => 1
    [LastName] => 2
    [Address] => 3
)

这样可以以后更轻松地比较密钥。

答案 2 :(得分:2)

你必须爆炸阵列  将数组存储在像这样的变量

$array = Array
(
    [0] => Array
    (
        [ID] => 3
        [FirstName] => Pim
        [LastName] => Svensson
        [Address] => Finland
    );

然后爆炸数组 在爆炸数组后,您将获得分离的数组参数,然后您可以使用内爆函数按任意顺序排列它们

答案 3 :(得分:0)

我退后一步,看看你真正需要做的事情。数组是关联的,所以你可以立即访问正确的元素,对吧?因此,除非您使用foreach打印输出,否则您并不需要它按顺序排列。

我建议使用以下解决方案之一:

  1. 如果需要“右”数组按键顺序排列,请查看数据库查询/类似数据,然后按照您需要的顺序选择列。
  2. 要打印的Foreach人,在“左”数组中查找顺序,然后在“右”数组中打印该键的相应值。

答案 4 :(得分:0)

嗯,你的问题并不常见,通常使用关联数组来解决有关“位置”的任何问题。 无论如何,有很多方法可以做你正在寻找的东西。

你可以使用list()但它的位置是基于:

foreach($oldArray as $o)
{
    list($firstName,$lastName,$address,$id)=$oldArray;
    $newArray[]=array($id,$firstName,$lastName,$address);
}

但解决问题的最佳方法是直接以正确的顺序填充数组,而不是在以后重新排序:)