dqwcdqs358367 2018-10-11 08:52
浏览 61

通过比较PHP中相同数组的元素值,使用用户定义的函数对关联数组进行排序

I want to sort an array elements by matching TAGS and ITEM_CD.here is source array mentioned below

array(
    array("TAGS" => "98056H","ITM_CD" => 51034),
    array("TAGS" => "98056H","ITM_CD" => 98056),
    array("TAGS" => "98056H","ITM_CD" => 84118),
    array("TAGS" => "96821H","ITM_CD" => 87591),
    array("TAGS" => "96821H","ITM_CD" => 96821)
);

and i want output like that

array(
    array("TAGS" => "98056H","ITM_CD" => 98056),
    array("TAGS" => "98056H","ITM_CD" => 51034),
    array("TAGS" => "98056H","ITM_CD" => 84118),
    array("TAGS" => "96821H","ITM_CD" => 96821)
    array("TAGS" => "96821H","ITM_CD" => 87591),
);

Anyone have idea please tell me how i can sort an array like that?.

here i mentioned sample code

function my_sort($a,$b) {
    if(str_replace('H','',$a['TAGS']) == $b['TAGS']){
        return 1;
    }
    return 0;
}
uasort($new_sort_arr,"my_sort");
print_r($new_sort_arr);
  • 写回答

2条回答 默认 最新

  • dongshuofu0039 2018-10-11 09:06
    关注

    Updated

    OK, I think I got it fixed here.

    This will sort the "TAGS" column and then will look for matching "TAGS" & "ITM_CD" values and bubble them up to the top of their respective "TAGS" group.

    $array = array(
    
      array("TAGS" => '22222H',"ITM_CD" => 98056),
      array("TAGS" => '98056H',"ITM_CD" => 51034),
      array("TAGS" => '22222H',"ITM_CD" => 22222),
      array("TAGS" => '98056H',"ITM_CD" => 84118),
      array("TAGS" => '96821H',"ITM_CD" => 87591),
      array("TAGS" => '98056H',"ITM_CD" => 98056),
      array("TAGS" => '22222H',"ITM_CD" => 22222),
      array("TAGS" => '96821H',"ITM_CD" => 96821)
    
    );
    
    
    function order($v){
    
      if($v > 0){
    
        return 1;
    
      }elseif($v < 0){
    
        return -1;
    
      }else {
    
        return 0;
    
      }
    
    }
    
    
    usort($array, function($a, $b){
      //Store value of the string compare.
      $v = strcmp($a['TAGS'], $b['TAGS']);
    
      if($v == 0){ //If 0 then the "Tags" column is ok. Check the "ITM_CD" sort
        //This will sort matching "Tags" & "ITM_CD" to the top.
        return (str_replace('H','', $a['TAGS']) == $b['ITM_CD']) ? 0 : 1;
    
      }else{
        //The "Tags" column needs sorted.
        return order($v);
    
      }
    
    });
    
    
    echo '<pre>';
    print_r(array_reverse($array));
    echo '</pre>';
    

    This will output:

    Array
    (
        [0] => Array
            (
                [TAGS] => 98056H
                [ITM_CD] => 98056
            )
    
        [1] => Array
            (
                [TAGS] => 98056H
                [ITM_CD] => 84118
            )
    
        [2] => Array
            (
                [TAGS] => 98056H
                [ITM_CD] => 51034
            )
    
        [3] => Array
            (
                [TAGS] => 96821H
                [ITM_CD] => 96821
            )
    
        [4] => Array
            (
                [TAGS] => 96821H
                [ITM_CD] => 87591
            )
    
        [5] => Array
            (
                [TAGS] => 22222H
                [ITM_CD] => 22222
            )
    
        [6] => Array
            (
                [TAGS] => 22222H
                [ITM_CD] => 22222
            )
    
        [7] => Array
            (
                [TAGS] => 22222H
                [ITM_CD] => 98056
            )
    
    )
    
    评论

报告相同问题?

悬赏问题

  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题