【问题标题】:Sort elements of an array depending on another array on PHP根据 PHP 上的另一个数组对数组的元素进行排序
【发布时间】:2020-05-21 07:09:15
【问题描述】:

考虑到一个数组的元素比另一个数组少,我如何根据另一个数组对数组进行排序?

// correct order
$order = ['aaa', 'ccc', 'bbb'];

// my array
$items = [
    'key_one' => 'ccc',
    'key_two' => 'aaa',
    'key_three' => 'ccc',
    'key_four' => 'bbb',
    'key_five' => 'aaa'
];

// the result I want
$items = [
    'key_two' => 'aaa',
    'key_five' => 'aaa'
    'key_one' => 'ccc',
    'key_three' => 'ccc',
    'key_four' => 'bbb'
];

我尝试过使用 array_merge 和 array_combine,但是键数不同,我不知道该怎么做。

【问题讨论】:

    标签: php arrays sorting


    【解决方案1】:

    使用以下代码:

     $items = [
        'key_one' => 'ccc',
        'key_two' => 'aaa',
        'key_three' => 'ccc',
        'key_four' => 'bbb',
        'key_five' => 'aaa'
    ];
    
    function list_cmp($a, $b) 
    { 
     $order = ['aaa', 'ccc', 'bbb'];
    
      foreach($order as $key => $value) 
        { 
          if($a==$value) 
            { 
              return 0; 
              break; 
            } 
    
          if($b==$value) 
            { 
              return 1; 
              break; 
            } 
        } 
    } 
    
    uasort($items, "list_cmp"); 
    
    print_r($items);
    

    【讨论】:

    • 结果是:数组( [key_two] => aaa [key_five] => aaa [key_one] => ccc [key_three] => ccc [key_four] => bbb )
    【解决方案2】:
    try to use the code below
    
    $items = [
            'key_one' => 'ccc',
            'key_two' => 'aaa',
            'key_three' => 'ccc',
            'key_four' => 'bbb',
            'key_five' => 'aaa'
        ];
        $order = ['aaa', 'ccc', 'bbb'];
        $newArray = [];
        foreach ($order as $order) {
            foreach($items as $key => $item){
                if($item == $order){
                    $newArray[$key] = $item;
                }
            }
        }
        print_r($newArray);
    

    【讨论】:

    • asort 的问题是它按字母顺序排列它们,而不是按照我建立的顺序。 asort 返回 aaa, bbb, ccc 而不是 aaa, ccc, bbb。
    • 很好,您需要将数组附加到另​​一个数组。
    猜你喜欢
    • 1970-01-01
    • 2012-08-11
    • 2018-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    相关资源
    最近更新 更多