按键对数组进行排序以匹配另一个数组';s按键排序


sort an array by key to match another array's order by key

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

有没有一个函数可以快速做到这一点?

我想不出任何一个,但如果两个数组的键都相同,那么为什么不循环第一个数组,并使用其键顺序使用第二个数组的值创建一个新数组呢?

$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] ;
}

您可以使用array_replace

$arr1=['x'=>'42','y'=>'551','a'=>'512','b'=>'gge',];$arr2=['a'=>'ordered','x'=>'this','y'=>'is','b'=>'now',];$arr2=数组替换($arr1,$arr2);

$arr2现在是

['x'=>这个,"y"=>是,'a'=>已排序,'b'=>现在,]
foreach(array_keys($array1) as $key)
{
  $tempArray[$key] = $array2[$key];
}
$array2 = $tempArray;

我不完全确定这是否是你想要的。不管怎样,只要数组保持相同的大小,这应该对您有效。

$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?

试试这个
代码

$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

查看ksort() 的php手册