首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否基于另一个数组按键对数组进行排序?

是否基于另一个数组按键对数组进行排序?
EN

Stack Overflow用户
提问于 2008-12-08 00:24:16
回答 14查看 165.6K关注 0票数 175

在PHP中有可能做这样的事情吗?你将如何编写一个函数?下面是一个例子。顺序是最重要的。

代码语言:javascript
复制
$customer['address'] = '123 fake st';
$customer['name'] = 'Tim';
$customer['dob'] = '12/08/1986';
$customer['dontSortMe'] = 'this value doesnt need to be sorted';

我想做一些像这样的事情

代码语言:javascript
复制
$properOrderedArray = sortArrayByArray($customer, array('name', 'dob', 'address'));

因为在最后我使用了foreach(),而它们的顺序不正确(因为我将值附加到一个字符串中,而这个字符串需要是正确的顺序,而我事先并不知道所有的数组键/值)。

我看过PHP的内部数组函数,但似乎只能按字母或数字排序。

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2012-02-01 23:41:13

只要使用array_mergearray_replace即可。array_merge的工作方式是从您给它的数组开始(按正确的顺序),然后用实际数组中的数据覆盖/添加键:

代码语言:javascript
复制
$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')

附言:我回答这个“陈旧”的问题,因为我认为之前给出的所有循环都是夸大其词的。

票数 380
EN

Stack Overflow用户

发布于 2008-12-08 00:32:45

这就对了:

代码语言:javascript
复制
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;
}
票数 114
EN

Stack Overflow用户

发布于 2014-11-25 21:59:12

这个解决方案怎么样?

代码语言:javascript
复制
$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));
});
票数 54
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/348410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档