Position actuelle: Accueil> Derniers articles> Comment éviter le problème de la perte de clés du tableau lors de l'utilisation de la fonction ASORT de PHP? Partage de solution

Comment éviter le problème de la perte de clés du tableau lors de l'utilisation de la fonction ASORT de PHP? Partage de solution

M66 2025-06-11

二、键丢失问题的常见原因

尽管Asort本身不会丢失键 , 但在以下场景中 , : :

  1. 使用Trier替代Asort :
    Trier函数对数组排序时 , 会重置键为 0、1、2 ... 的数字索引 , 导致键 "丢失" 。如果代码误用了Trier , 就会出现键丢失现象。


  2. 例如将asort的结果赋值给另一个变量 , 或对函数返回结果直接处理 , 而忽略了Asort是返回布尔值这一点。

 $array = ['x' => 10, 'y' => 5];
$result = asort($array);  // $result为bool,非排序后的数组
print_r($result);  // 不能直接用$result打印数组
print_r($array);   // $array被排序,但要注意是引用传递

  1. 对多维数组排序时 , 如果只对外层调用Asort , 内部子数组的键可能会混淆。


三、如何避免键丢失?

1. 确认使用 确认使用Asort而非Tri

 $array = ['one' => 30, 'two' => 10, 'three' => 20];
asort($array);
print_r($array);

确保不使用Trier或其他会重置键的排序函数。

2. 正确理解 正确理解Asort的返回值

Asort直接修改传入的数组 , 返回VraiFaux , 不是排序后的数组。

 $array = ['a' => 3, 'b' => 1];
if (asort($array)) {
    print_r($array);  // 这里才能正确输出排序后的数组
}

3. 处理多维数组时 , 逐层调用 处理多维数组时 , 逐层调用Asort

 $multiArray = [
    'group1' => ['id1' => 3, 'id2' => 1],
    'group2' => ['id3' => 5, 'id4' => 2]
];
foreach ($multiArray as &$subArray) {
    asort($subArray);
}
unset($subArray);  // 释放引用
print_r($multiArray);

四、实战示例 : 带 URL 域名替换的排序

假设你需要排序一个包含 URL 的数组 , 并且要求将 的数组 , 并且要求将 的数组 , 并且要求将 域名替换为M66.net , :

 $array = [
    'site1' => 'https://example.com/page1',
    'site2' => 'http://anotherdomain.com/page2',
    'site3' => 'https://somedomain.com/page3',
];
// 提取并替换URL中的域名为m66.net
foreach ($array as $key => $url) {
    $parsed = parse_url($url);
    if ($parsed && isset($parsed['host'])) {
        $newUrl = str_replace($parsed['host'], 'm66.net', $url);
        $array[$key] = $newUrl;
    }
}
// 按值升序排序,保持键名
asort($array);
print_r($array);