加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP中的多种关联数组

发布时间:2020-12-13 17:29:09 所属栏目:PHP教程 来源:网络整理
导读:考虑以下关联数组 $arr = Array( [banana] = 2 [cherry] = 1 [orange] = 3 [grapefruit] = 1 [apple] = 1) 我想以类似于PLSQL术语的方式进行排序:A DESC,B ASC (其中A为值,B为关键字)含义: $arr = Array( [orange] = 3 [banana] = 2 [apple] = 1 [cherry]
考虑以下关联数组
$arr = Array
(        
    [banana] => 2
    [cherry] => 1
    [orange] => 3
    [grapefruit] => 1
    [apple] => 1
)

我想以类似于PLSQL术语的方式进行排序:A DESC,B ASC
(其中A为值,B为关键字)含义:

$arr = Array
(
    [orange] => 3
    [banana] => 2
    [apple] => 1
    [cherry] => 1
    [grapefruit] => 1        
)

所以橙子和香蕉是第一个因为VALUE,但随后苹果,樱桃和葡萄柚按字母顺序排列,因为它们有相同的值.

我试过的
运行ksort(),然后asort()/rsort()希望第二种排序将橙色和香蕉撞到阵列的开头,而不会弄乱其他3项的字母排序.我错了.它确实搞乱了一切.所以我检查了:2. sort functions和array_multisort().但显然它会立即排列几个数组,或多维数组.
我也试图定义以下比较函数:

function cmp($a,$b)
{
    foreach ($a as $key1 => $val1) {
        foreach ($b as $key2 => $val2) {
            if($val1 == $val2){
                return strcmp($key1,$key2);
            }
            else if ($val1 > $val2){
                return 1;
            }
            else{ // $val1 < $val2
                return -1;
            }
        }
    }    
}

并用usort()打电话,但也没有工作.

所以我的问题是:是否有一个实现请求行为的PHP方法?

对于欧根:
我试过了,没有办法
排序前:

Array
(
    [lamb] => 3
    [rule] => 1
    [children] => 1
    [teacher] => 2
    [eager] => 1
)

并排序后:

Array
(
    [children] => 1
    [eager] => 1
    [rule] => 1
    [teacher] => 2
    [lamb] => 3
)
你可以使用 array_multisort
<?php
    $arr = Array
    (        
        'banana' => 2,'cherry' => 1,'orange' => 3,'grapefruit' => 1,'apple' => 1
    );

    $values = array_values($arr);
    $keys = array_keys($arr);

    //first sort by values desc,then sort by keys asc
    array_multisort($values,SORT_DESC,$keys,SORT_ASC,$arr);

    print_r($arr);
    // output:
    /*
    Array
    (
        [orange] => 3
        [banana] => 2
        [apple] => 1
        [cherry] => 1
        [grapefruit] => 1
    )
    */

?>

它的工作原理如下:

>为每列用于排序(值和键),创建新的1d数组及其内容
>将这些1d数组传递给排序顺序中的array_multisort函数(所以先$$$),为每个数组添加排序顺序
>最后一个参数必须是要排序的数组

(也许你会发现this explanation更容易理解)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读