📜  php usort keep keys - PHP (1)

📅  最后修改于: 2023-12-03 15:03:35.997000             🧑  作者: Mango

PHP函数:使用usort进行自定义数组排序并保持键

在PHP中,可以使用usort()函数对数组进行自定义排序。这个函数允许我们使用自己的排序函数来定义如何比较数组元素,然后根据比较结果对数组元素进行排序。然而,使用usort()函数进行排序时,键(键)通常被重置为零索引数组。这往往会导致问题,因为我们可能希望保留数组的键。

问题

在PHP中,当我们使用usort()函数对数组进行自定义排序时,会重置数组的键。例如,如果我们在以下数组上使用usort()函数:

$array = array(
    "john" => 3,
    "peter" => 1,
    "mary" => 2
);
usort($array, function($a, $b) {
    return $a - $b;
});

print_r($array);

我们将得到输出:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)

在这种情况下,键(john,peter和mary)已被重置为零索引数组。

解决方案

要解决这个问题,我们可以使用PHP的一个内置函数array_merge(),它将两个或多个数组合并为一个数组。此函数具有一个重要的特征,即当处理关联数组时,它保留相同的键,并在值之间追加新的值数组。

因此,我们可以使用此功能来保留我们在排序前拥有的键。例如,以下代码演示了如何在排序过程中保留键:

$array = array(
    "john" => 3,
    "peter" => 1,
    "mary" => 2
);
usort($array, function($a, $b) {
    return $a - $b;
});

$keys = array_keys($array);
$values = array_values($array);
$array = array_combine($keys, $values);

print_r($array);

输出将保留原始键:

Array
(
    [john] => 3
    [mary] => 2
    [peter] => 1
)
代码片段
$array = array(
    "john" => 3,
    "peter" => 1,
    "mary" => 2
);
usort($array, function($a, $b) {
    return $a - $b;
});

$keys = array_keys($array);
$values = array_values($array);
$array = array_combine($keys, $values);

print_r($array);
结论

使用usort()函数对数组进行自定义排序非常方便。但是,请记住,排序过程可能会重置数组的键。解决这个问题的方法是保留原始键并在排序后重新分配它们。我们可以使用array_merge()函数来做到这一点。