现在有点困在这个上,所以任何帮助都会受到赞赏。我有一个包含元素列表的数组(左),目标是使用左数组中的值对另一个数组(右)键进行排序。
左侧数组
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,如果有帮助的话!
答案 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
打印输出,否则您并不需要它按顺序排列。
我建议使用以下解决方案之一:
答案 4 :(得分:0)
嗯,你的问题并不常见,通常使用关联数组来解决有关“位置”的任何问题。 无论如何,有很多方法可以做你正在寻找的东西。
你可以使用list()但它的位置是基于:
foreach($oldArray as $o)
{
list($firstName,$lastName,$address,$id)=$oldArray;
$newArray[]=array($id,$firstName,$lastName,$address);
}
但解决问题的最佳方法是直接以正确的顺序填充数组,而不是在以后重新排序:)