代码之家  ›  专栏  ›  技术社区  ›  MonkeyZeus

为什么/如何使用此数组?

  •  2
  • MonkeyZeus  · 技术社区  · 6 年前

    代码

    <?php
    $data = array(
        'uid3' => array(
            'name' => 'Unique ID 3',
            'count' => 11
        ),
        'uid1' => array(
            'name' => 'Unique ID 1',
            'count' => 11
        ),
        'uid2' => array(
            'name' => 'Unique ID 2',
            'count' => 15
        ),
        'uid4' => array(
            'name' => 'Unique ID 4',
            'count' => 13
        )
    );
    
    $counts = array_map( function( $v ){
        return $v[ 'count' ];
    }, $data );
    
    $names = array_map( function( $v ){
        return $v[ 'name' ];
    }, $data );
    
    print_r( $counts );
    print_r( $names );
    
    array_multisort(
        $counts, SORT_DESC, SORT_NUMERIC,
        $names, SORT_ASC, SORT_STRING,
        $data
    );
    
    print_r( $data );
    

    输出:

    // $counts
    Array
    (
        [uid3] => 11
        [uid1] => 11
        [uid2] => 15
        [uid4] => 13
    )
    
    // $names
    Array
    (
        [uid3] => Unique ID 3
        [uid1] => Unique ID 1
        [uid2] => Unique ID 2
        [uid4] => Unique ID 4
    )
    
    // $data after sorting
    Array
    (
        [uid2] => Array
            (
                [name] => Unique ID 2
                [count] => 15
            )
    
        [uid4] => Array
            (
                [name] => Unique ID 4
                [count] => 13
            )
    
        [uid1] => Array
            (
                [name] => Unique ID 1
                [count] => 11
            )
    
        [uid3] => Array
            (
                [name] => Unique ID 3
                [count] => 11
            )
    
    )
    

    问题:

    怎么做到的 array_multisort() 知道应用的排序结果 $counts count 多维数组中每个项的子键 $data 是吗?

    同样地 $names name 子键。


    奖金:

    如果 $names, SORT_ASC, SORT_STRING, 然后在函数调用中被注释掉 uid3 最后还是 uid1 是的。为什么?


    我已经阅读了以下参考资料,但我无法概括这一点如何适用于我的示例:

    http://php.net/manual/en/function.array-multisort.php

    how php array_multisort work?

    how to sort array like mysql

    1 回复  |  直到 6 年前
        1
  •  1
  •   Patrick Q    6 年前

    我不打算把这个作为答案,但我只需要几个额外的字符。

    我不能肯定地说 在技术层面上这么做,但我认为应该特别强调 array_multisort() 知道应用的排序结果 $counts 对于count子键,答案是“没有”。更改子键,得到相同的结果。也许我并没有按你想的方式来理解你的问题,但你似乎在问,它如何知道如何看待 $data 然后进行分类。但它没有。它看起来 $names 已排序(查看如何 $计数 已排序)并将相同的排序应用于 初级的 钥匙 $数据 是的。也就是说,它会看到原来的位置移到了新的位置。第一个数组是由一个子键的值组成的,而第二个数组是由另一个子键组成的,这与此无关。以相同的顺序手工构建这些数组,您将得到相同的结果。

    另外,我认为这与“如果两个成员比较相等,那么它们在排序数组中的相对顺序是未定义的”有关。所以这只是巧合。