在PHP中有可能做这样的事情吗?你将如何编写一个函数?下面是一个例子。顺序是最重要的。
$customer['address'] = '123 fake st';
$customer['name'] = 'Tim';
$customer['dob'] = '12/08/1986';
$customer['dontSortMe'] = 'this value doesnt need to be sorted';
我想做一些像这样的事情
$properOrderedArray = sortArrayByArray($customer, array('name', 'dob', 'address'));
因为在最后我使用了foreach(),而它们的顺序不正确(因为我将值附加到一个字符串中,而这个字符串需要是正确的顺序,而我事先并不知道所有的数组键/值)。
我看过PHP的内部数组函数,但似乎只能按字母或数字排序。
发布于 2012-02-01 23:41:13
只要使用array_merge
或array_replace
即可。array_merge
的工作方式是从您给它的数组开始(按正确的顺序),然后用实际数组中的数据覆盖/添加键:
$customer['address'] = '123 fake st';
$customer['name'] = 'Tim';
$customer['dob'] = '12/08/1986';
$customer['dontSortMe'] = 'this value doesnt need to be sorted';
$properOrderedArray = array_merge(array_flip(array('name', 'dob', 'address')), $customer);
// or
$properOrderedArray = array_replace(array_flip(array('name', 'dob', 'address')), $customer);
// $properOrderedArray: array(
// 'name' => 'Tim',
// 'dob' => '12/08/1986',
// 'address' => '123 fake st',
// 'dontSortMe' => 'this value doesnt need to be sorted')
附言:我回答这个“陈旧”的问题,因为我认为之前给出的所有循环都是夸大其词的。
发布于 2008-12-08 00:32:45
这就对了:
function sortArrayByArray(array $array, array $orderArray) {
$ordered = array();
foreach ($orderArray as $key) {
if (array_key_exists($key, $array)) {
$ordered[$key] = $array[$key];
unset($array[$key]);
}
}
return $ordered + $array;
}
发布于 2014-11-25 21:59:12
这个解决方案怎么样?
$order = array(1,5,2,4,3,6);
$array = array(
1 => 'one',
2 => 'two',
3 => 'three',
4 => 'four',
5 => 'five',
6 => 'six'
);
uksort($array, function($key1, $key2) use ($order) {
return (array_search($key1, $order) > array_search($key2, $order));
});
https://stackoverflow.com/questions/348410
复制相似问题