2013-03-27 132 views
3

我有一个数组,我想通过值来使用数组。 这里是现有阵列:PHP按值重新排序阵列

1 => Array (9) 
    OrgID => "XXXX" 
    DOB => "1970-01-01" 
    PersonID => "111111" 
    ExpDate => "2013-07-31" 
    Level => "WELITE" 
    Status => "Active" 
    FName => "Jane" 
    LName => "Doe" 
    Checked => null 
2 => Array (9) 
    OrgID => "XXXX" 
    DOB => "1970-01-01" 
    PersonID => "222222" 
    ExpDate => "2013-07-31" 
    Level => "WELITE" 
    Status => "Active" 
    FName => "Jane" 
    LName => "Doe" 
    Checked => null 
3 => Array (9) 
    OrgID => "XXXX" 
    DOB => "1970-01-01" 
    PersonID => "22222" 
    ExpDate => "2013-07-31" 
    Level => "WELITE" 
    Status => "Active" 
    FName => "Jane" 
    LName => "Doe" 
    Checked => null 

我想基于一个名为水平的值的数组诉诸成以下,并创建一个关键:

WELITE => (3) 
    1 => Array (9) 
    OrgID => "XXXX" 
    DOB => "1970-01-01" 
    PersonID => "111111" 
    ExpDate => "2013-07-31" 
    Status => "Active" 
    FName => "Jane" 
    LName => "Doe" 
    Checked => null 
2 => Array (9) 
    OrgID => "XXXX" 
    DOB => "1970-01-01" 
    PersonID => "222222" 
    ExpDate => "2013-07-31" 
    Status => "Active" 
    FName => "Jane" 
    LName => "Doe" 
    Checked => null 
3 => Array (9) 
    OrgID => "XXXX" 
    DOB => "1970-01-01" 
    PersonID => "22222" 
    ExpDate => "2013-07-31" 
    Status => "Active" 
    FName => "Jane" 
    LName => "Doe" 
    Checked => null 

这里是我到目前为止已经试过:

$sort = array(); 
foreach($WlevelArray as $k=>$v) { 
    $sort['Level'][$k] = $v['Level']; 
    $sort['OrgID'][$k] = $v['OrgID']; 
} 
array_multisort($sort['Level'], SORT_DESC, $sort['OrgID'], SORT_ASC, $WlevelArray); 

但这会产生两个数组。

回答

3

基于我认为你的目标是什么,我对你正在寻找的东西有点困惑我已经包含了下面的代码。

设置阵列:

$example1 = array(
    "OrgID" => "XXXX", 
    "DOB" => "1970-01-01", 
    "PersonID" => "111111", 
    "ExpDate" => "2013-07-31", 
    "Level" => "WELITE", 
    "Status" => "Active", 
    "FName" => "Jane", 
    "LName" => "Doe", 
    "Checked" => null 
); 

$example2 = array(
    "OrgID" => "XXXX", 
    "DOB" => "1970-01-01", 
    "PersonID" => "222222", 
    "ExpDate" => "2013-07-31", 
    "Level" => "WELITE", 
    "Status" => "Active", 
    "FName" => "Jane", 
    "LName" => "Doe", 
    "Checked" => null 
); 

$example3 = array(
    "OrgID" => "XXXX", 
    "DOB" => "1970-01-01", 
    "PersonID" => "22222", 
    "ExpDate" => "2013-07-31", 
    "Level" => "WELITE", 
    "Status" => "Active", 
    "FName" => "Jane", 
    "LName" => "Doe", 
    "Checked" => null 
); 

// Initial array 
$initArray = array($example1, $example2, $example3); 

现在让我们 '排序':

$finalArray = array(); 
$i = 0; 
foreach ($initArray as $key => $value) { 
    (isset($value['Level'])) ? $finalArray[$value['Level']][$i] = $value : NULL; 
    unset($finalArray[$value['Level']][$i]['Level']); 
    $i++; 
} 

echo '<pre>', print_r($finalArray, true), '</pre>'; 

输出:

Array 
(
    [WELITE] => Array 
     (
      [0] => Array 
       (
        [OrgID] => XXXX 
        [DOB] => 1970-01-01 
        [PersonID] => 111111 
        [ExpDate] => 2013-07-31 
        [Status] => Active 
        [FName] => Jane 
        [LName] => Doe 
        [Checked] => 
       ) 

      [1] => Array 
       (
        [OrgID] => XXXX 
        [DOB] => 1970-01-01 
        [PersonID] => 222222 
        [ExpDate] => 2013-07-31 
        [Status] => Active 
        [FName] => Jane 
        [LName] => Doe 
        [Checked] => 
       ) 

      [2] => Array 
       (
        [OrgID] => XXXX 
        [DOB] => 1970-01-01 
        [PersonID] => 22222 
        [ExpDate] => 2013-07-31 
        [Status] => Active 
        [FName] => Jane 
        [LName] => Doe 
        [Checked] => 
       ) 

     ) 

) 

编辑

我发现一个问题,改变“级别”值时,指数将继续增加,因为我用的是一个自动递增变量$i。所以我加了sort($finalArray[$value['Level']]);,它重置了索引值。

foreach ($initArray as $key => $value) { 
    (isset($value['Level'])) ? $finalArray[$value['Level']][$i] = $value : NULL; 
    unset($finalArray[$value['Level']][$i]['Level']); 
    // Add this line to fix indexes 
    sort($finalArray[$value['Level']]); 
    $i++; 
}