PHP - 根据键名对数组进行排序以匹配另一个数组的键名排序。

11

我有两个数组,它们具有相同的键(不同的值),但是数组#2的顺序不同。我希望能够重新排序第二个数组,使其与第一个数组的顺序相同。

是否有可以快速完成此操作的函数?

5个回答

13

我头脑中暂时想不出具体的方法,但是如果这两个数组的键值相同,为什么不直接遍历第一个数组并使用它的键顺序创建一个新的数组,再将第二个数组的值填入呢?

$arr1 = array(
    'a' => '42', 
    'b' => '551',
    'c' => '512',
    'd' => 'gge',
) ;


$arr2 = array(
    'd' => 'ordered',
    'b' => 'is',
    'c' => 'now',
    'a' => 'this', 
) ;

$arr2ordered = array() ;

foreach (array_keys($arr1) as $key) {
    $arr2ordered[$key] = $arr2[$key] ;
}

6
你可以使用 array_replace。 $arr1 = [ 'x' => '42', 'y' => '551', 'a' => '512', 'b' => 'gge', ];
$arr2 = [ 'a' => 'ordered', 'x' => 'this', 'y' => 'is', 'b' => 'now', ]; $arr2 = array_replace($arr1, $arr2);
现在,$arr2
[ 'x' => this, 'y' => is, 'a' => ordered, 'b' => now,
]

我已经点赞了,但也许是徒劳无功的,因为结果如下:array ( 'd' => 'ordered', 'b' => 'is', 'c' => 'now', 'a' => 'this', ) - Boolean_Type
是的,正确的写法是 array_multisort(array_keys($arr1), SORT_DESC, SORT_STRING, $arr2); - leninzprahy
1
不要再试了!结果是 array ( 'a' => 'this', 'c' => 'now', 'b' => 'is', 'd' => 'ordered', )!我认为你没有测试你的答案。 - Boolean_Type
1
是的,非常抱歉,最好使用array_replace,现在应该没问题了,希望如此。 - leninzprahy

0
foreach(array_keys($array1) as $key)
{
  $tempArray[$key] = $array2[$key];
}
$array2 = $tempArray;

0

我不完全确定这是否符合您的要求。无论如何,只要数组保持相同的大小,那么这应该适用于您。

$gamey = array ("wow" => "World of Warcraft", "gw2" => "Guild Wars2", "wiz101" => "Wizard 101");
$gamex = array ("gw2" => "best game", "wiz101" => "WTF?", "wow" => "World greatest");


function match_arrayKeys ($x, $y)
{
    $keys    = array_keys ($x);
    $values  = array_values ($y);

    for ($x = 0; $x < count ($keys); $x++)
    {
        $newarray [$keys[$x]] = $y[$keys[$x]];
    }
    return $newarray;
}

print_r (match_arrayKeys ($gamey, $gamex)); 

输出

[wow] => World greatest
[gw2] => best game
[wiz101] => WTF?

-1
尝试一下
代码
$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
ksort($fruits);
foreach ($fruits as $key => $val) {
    echo "$key = $val\n";
}

输出

a = orange
b = banana
c = apple
d = lemon

查看PHP手册以了解ksort()


Ksort 只按键对数组进行排序,我希望有一个函数可以重新排序第二个数组以匹配第一个数组。 - Joe
使用ksort()函数对两个数组进行排序怎么样? - kushalbhaktajoshi
5
对两个数组都使用 ksort() 会改变它们的顺序,问题是将第二个数组的顺序与第一个数组对齐。 - dbf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接