လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PHP ၏ asort function ကိုအသုံးပြုသောအခါ array key ဆုံးရှုံးမှုပြ issue နာကိုမည်သို့ရှောင်ရှားရမည်နည်း။ ဖြေရှင်းချက်မျှဝေခြင်း

PHP ၏ asort function ကိုအသုံးပြုသောအခါ array key ဆုံးရှုံးမှုပြ issue နာကိုမည်သို့ရှောင်ရှားရမည်နည်း။ ဖြေရှင်းချက်မျှဝေခြင်း

M66 2025-06-11

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

尽管asor本身不会丢失键, 但在以下场景中, 程序员容易误以为键被丢失, 程序员容易误以为键被丢失: 程序员容易误以为键被丢失: 程序员容易误以为键被丢失:

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

  2. 直接赋值导致丢失关联:
    例如将asor的结果赋值给另一个变量, 或对函数返回结果直接处理, 而忽略了asort是返回布尔值这一点။

错误写法示例:

 $array = ['x' => 10, 'y' => 5];
$result = asort($array);  // $result为bool,非排序后的数组
print_r($result);  // 不能直接用$result打印数组
print_r($array);   // $array被排序,但要注意是引用传递
  1. 处理多维数组时误用排序:
    对多维数组排序时, 如果只对外层调用asort , 内部子数组的键可能会混淆။


三, 如何避免键丢失, 如何避免键丢失?

1 ။ 确认使用确认使用asor而非sort

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

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

2 ။ 正确理解正确理解asor的返回值

Asor直接修改传入的数组, 返回မှန်မှန်ကန်ကန်မှားသော , 不是排序后的数组။

 $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 假设你需要排序一个包含, 并且要求将并且要求将, 并且要求将并且要求将, 并且要求将并且要求将, 并且要求将域名替换为m666.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);

输出结果: