2011-11-25 34 views
0

我有两个array如何使用自定义或用户定义的标准在PHP中对数组进行合并和排序?

$data1 = array( 
     (0) => array("level" => 1, "id" => 1, "index" => 1, "amount" => 50000), 
     (1) => array("level" => 1, "id" => 2, "index" => 1, "amount" => 40000), 
     (2) => array("level" => 1, "id" => 3, "index" => 1, "amount" => 0)); 

$data2 = array( 
     (0) => array("level" => 2, "id" => 1, "index" => 1, "amount" => 30000), 
     (1) => array("level" => 2, "id" => 1, "index" => 2, "amount" => 20000), 
     (2) => array("level" => 2, "id" => 2, "index" => 1, "amount" => 15000), 
     (3) => array("level" => 2, "id" => 2, "index" => 2, "amount" => 25000), 
     (4) => array("level" => 2, "id" => 3, "index" => 1, "amount" => 0)); 

我想这些数组合并成一个数组,其结果是这样的:

$expected = array(
     (0) => array("level" => 1, "id" => 1, "index" => 1, "amount" => 50000), 
     (1) => array("level" => 2, "id" => 1, "index" => 1, "amount" => 30000), 
     (2) => array("level" => 2, "id" => 1, "index" => 2, "amount" => 20000), 
     (3) => array("level" => 1, "id" => 2, "index" => 1, "amount" => 40000), 
     (4) => array("level" => 2, "id" => 2, "index" => 1, "amount" => 15000), 
     (5) => array("level" => 2, "id" => 2, "index" => 2, "amount" => 25000)); 

我试着使用array_merge_recursive

$try = array_merge_recursive($data1, $data2); 

但结果是这样的:

$try = array(
     (0) => array("level" => 1, "id" => 1, "index" => 1, "amount" => 50000), 
     (1) => array("level" => 1, "id" => 2, "index" => 1, "amount" => 40000), 
     (3) => array("level" => 1, "id" => 3, "index" => 1, "amount" => 0), 
     (4) => array("level" => 2, "id" => 1, "index" => 1, "amount" => 30000), 
     (5) => array("level" => 2, "id" => 1, "index" => 2, "amount" => 20000),    
     (6) => array("level" => 2, "id" => 2, "index" => 1, "amount" => 15000), 
     (7) => array("level" => 2, "id" => 2, "index" => 2, "amount" => 25000), 
     (8) => array("level" => 2, "id" => 3, "index" => 1, "amount" => 0)); 

我有我的成绩标准:其中金额= 0

  • 排序和order by ID,水平,指标
  • 我读过

    1. 删除阵列大约uasort和但我没有任何想法如何实现该功能来匹配我所需要的。该函数(uasort/usort)是否可以解决它或任何其他想法?请帮助我,谢谢!

    +0

    可能重复[PHP数组排序使用内VAL(http://stackoverflow.com/questions/3804278/ph​​p-array -sort-using-inner-val) – hakre

    +0

    我知道有很多关于使用'usort'或'uasort'对数组进行排序的参考,就像我在我的问题中所说的那样,但我仍然混淆了如何使用多个标准来实现,所以我在这里问这个问题。感谢@deceze给我清楚的例子。 –

    回答

    3
    $data = array_merge($data1, $data2); 
    $data = array_filter($data, function ($d) { 
        return $d['amount'] != 0; 
    }); 
    usort($data, function ($a, $b) { 
        if ($a['id'] != $b['id'])  return $a['id'] - $b['id']; 
        if ($a['level'] != $b['level']) return $a['level'] - $b['level']; 
        else       return $a['index'] - $b['index']; 
    }); 
    

    注意:使用PHP 5.3+匿名函数语法。

    +0

    伟大的答案!智能使用减去使用方法中的标准。 – Jeune

    +0

    请注意,我可能会有'$ a' /'$ b'的参数倒退,我总是忘记哪些返回排序上升和下降。你可能不得不简单地切换减法中的值... :) – deceze

    +0

    它完美的工作,许多感谢@deceze! –

    1

    这是否对你的工作:

     
    $finalArr = array_merge($data1,$data2); 
    
    foreach($finalArr as $key => $val) { 
        if(empty($val['amount'])) { 
         unset($finalArr[$key]); 
        } 
    } 
    echo "<pre>"; 
    sort($finalArr); 
    print_r($finalArr); 
    

    希望它可以帮助的

    +0

    它的工作原理,但仅用于删除空的金额,仍然不会按id,level,index排序和排序。无论如何感谢您的帮助。 –

    相关问题