【问题标题】:Display array sorted based on another array显示基于另一个数组排序的数组
【发布时间】:2014-05-23 06:53:24
【问题描述】:

我有 2 个数组

Array 1 : $agents = Array('abc','xyz','pqr');
Array 2 : $tot_calls = Array ('10','5','20');

这里的数组 2 分别反映了 $agents 数组中代理的总调用次数。 即代理 abc 打了 10 个电话,代理 xyz 打了 5 个电话,依此类推。

我希望结果数组显示按呼叫次数排序(降序)的代理

$result = Array('pqr','abc','xyz'); // 这里的结果数组是按照他们发出的最大调用次数排序的。

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    您可以在这种特殊情况下将array_combine()krsort() 结合使用。考虑这个例子:

    $agents = Array('abc','xyz','pqr');
    $tot_calls = Array ('10','5','20');
    // calls become the keys and agents become the values
    $sorted_values = array_combine($tot_calls, $agents);
    krsort($sorted_values); // sort them by keys
    
    print_r($sorted_values);
    
    // maybe if you want to clear the keys
    $sorted_values = array_values($sorted_values);
    

    Sample Fiddle

    编辑:

    另外,@Satish 提出了一个很好的观点。为了避免相同的关键问题(也许,至少在没有代理名称冲突的情况下)。您可以改用它(反之亦然):

    $agents = Array('abc','xyz','pqr');
    $tot_calls = Array ('10','5','20');
    // agents become keys and calls become values
    $sorted_values = array_combine($agents, $tot_calls);
    arsort($sorted_values);
    $sorted_values = array_keys($sorted_values);
    
    print_r($sorted_values);
    

    Sample Fiddle

    【讨论】:

    • 它的错误方法如果有更多用户使用相同的调用会发生什么情况 array_combine 如何在您的数组中建立相同的索引。
    • 如果再有一个用户使用相同的电话如$agents = Array('abc','xyz','pqr', 'lmn'); $tot_calls = Array ('10','5','20','5');会发生什么
    • @kevinabelita 还不正确。请参阅您的代码的link
    【解决方案2】:

    试试这个

    $agents = Array('abc','xyz','pqr');
    $tot_calls = Array (10, 5, 20);
    
    arsort($tot_calls);
    foreach($tot_calls as $key=>$val)
    {
      $arr_agents[] = $agents[$key];
    }
    print_r($arr_agents);
    

    输出:

    Array
    (
        [0] => pqr
        [1] => abc
        [2] => xyz
    )
    

    DEMO

    DEMO-2 :

    $agents = Array('abc','xyz','pqr','lmn');
    $tot_calls = Array ('10', '5', '20', '5');
    

    输出 2:

    Array
    (
        [0] => pqr
        [1] => abc
        [2] => lmn
        [3] => xyz
    )
    

    【讨论】:

      猜你喜欢
      • 2014-10-25
      • 2013-06-24
      • 1970-01-01
      • 1970-01-01
      • 2021-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-25
      相关资源
      最近更新 更多