排序数组匹配键顺序

时间:2014-06-18 11:43:44

标签: php sorting

我有以下数组:

$names = array('fred', 'bob', 'john');

$input = array('bob' => array('bob data'), 'john' => array('john data'), 'fred' => array('fred data'));

我想重新排序$input中的密钥,以便它们与$names中指定的顺序完全相同。有什么想法吗?

4 个答案:

答案 0 :(得分:1)

看到第二个数组如何被适当地索引,你可以将其视为重组问题,而不是考虑排序算法:

function recombine(array $input, array $names)
{
    $result = [];
    foreach ($names as $name) {
        $result[$name] = $input[$name];
    }
    return $result;
}

$input = recombine($input, $names);

如果$input中没有某些名称,则需要在循环体内放置一个条件。

答案 1 :(得分:0)

您可以使用以下内容:

function sortByArray($input, $order)
{
    $sorted = array();
    $count = count($order);
    for ($i = 0; $i < $count; $i++) {
        if (isset($input[$order[$i]])) {
            $sorted[$order[$i]] = $input[$order[$i]];
        }
    }
    return $sorted;
}

$input = sortByArray($input, $names);

答案 2 :(得分:0)

试试这个:

$names = array('fred', 'bob', 'john');
foreach($names as $val){
    $input[$val]=array($val=>$val."Data");
}
var_dump($input);

答案 3 :(得分:-1)

我使用以下代码

$names = array('fred', 'bob', 'john');

$input = array('bob' => array('bob data'), 'john' => array('john data'), 'fred' => array('fred data'));

$result = [];
foreach ($names as $name) {
    $result[$name] = $input[$name];
}
print_r($result);